diff --git a/corpora/degarbayan/CorpusPair.xml b/corpora/degarbayan/CorpusPair.xml new file mode 100755 index 00000000..c2f4b7c8 --- /dev/null +++ b/corpora/degarbayan/CorpusPair.xml @@ -0,0 +1,90 @@ + + + + + 10001 + + + asrirannews + + + aftabnewsnews + + + 458034 + + + 356246 + + + 24 نفر نهایی تیم ملی بدون تغییری خاص معرفی شد + + + کی روش 24 بازیکن را به تیم ملی فوتبال دعوت کرد + + + title + + + 1 + + + + + 10003 + + + asrirannews + + + aftabnewsnews + + + 458038 + + + 356247 + + + سقوط هواپیمای مسافربری در جنوب روسیه / مرگ همه 61 سرنشین (+فیلم) + + + سقوط هواپیمای مسافربری در روسیه با 61 کشته + + + title + + + 0 + + + + + 10018 + + + asrirannews + + + iribnews + + + 458069 + + + 1071139 + + + پیروزی والیبال نشسته بانوان ایران مقابل کانادا + + + نخستین پیروزی بانوان ایران رقم خورد + + + title + + + -1 + + + diff --git a/hazm/DegarbayanReader.py b/hazm/DegarbayanReader.py new file mode 100644 index 00000000..54bb830c --- /dev/null +++ b/hazm/DegarbayanReader.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +from __future__ import unicode_literals, print_function +import os +from xml.dom import minidom + +class DegarbayanReader(): + """ + interfaces [Degarbayan Corpus](https://www.peykaregan.ir/dataset/%D9%BE%DB%8C%DA%A9%D8%B1%D9%87-%D8%AF%DA%AF%D8%B1%D8%A8%DB%8C%D8%A7%D9%86) + معانی‌جو، ر.، و میرروشندل، س.ا. (۱۳۹۶). دگربیان: توسعه پیکره متنی فارسی جملات و عبارات معادل به کمک روش جمع‌سپاری. علوم رایانش و فناوری اطلاعات، ۱۵ (۱)، ۲۲-۳۰. + + >>> degarbayan = DegarbayanReader(root='corpora/degarbayan') + >>> next(degarbayan.pairs()) + ('24 نفر نهایی تیم ملی بدون تغییری خاص معرفی شد', 'کی روش 24 بازیکن را به تیم ملی فوتبال دعوت کرد', 'Paraphrase') + """ + + def __init__(self, root, corpus_file='CorpusPair.xml', judge_type='three_class', version=1.0): + """ + :param root: Path to corpus folder. + :param corpus_file: Name of corpus pair file. Defaults to 'CorpusPair.xml' + :param judge_type: How to return judge value. can be eighter 'two_class' or 'three_class' + for two or three class value returns. Defaults to 'three_class' + :param version: Corpus version. Defaults to version 1.0 + :type root: str + :type corpuse_file: str + :type judge_type: str + :type version: float + """ + self._root = root + self._corpus_file = corpus_file + self._judge_type = judge_type + if judge_type != 'three_class' and judge_type != 'two_class': + self._judge_type = 'three_class' + + def docs(self): + + def judge_number_to_text(judge): + if judge == '1' or (self._judge_type == 'two_class' and judge == '0'): + return 'Paraphrase' + elif judge == '0': + return 'SemiParaphrase' + else: + return 'NotParaphrase' + + filename = os.path.join(self._root, self._corpus_file) + if os.path.exists(filename): + try: + elements = minidom.parse(filename) + for element in elements.getElementsByTagName('Pair'): + pair = {} + pair['id'] = element.getElementsByTagName('PairId')[0].childNodes[0].data.strip() + pair['news_source1'] = element.getElementsByTagName('NewsSource1')[0].childNodes[0].data.strip() + pair['news_source2'] = element.getElementsByTagName('NewsSource2')[0].childNodes[0].data.strip() + pair['news_id1'] = element.getElementsByTagName('NewsId1')[0].childNodes[0].data.strip() + pair['news_id2'] = element.getElementsByTagName('NewsId2')[0].childNodes[0].data.strip() + pair['sentence1'] = element.getElementsByTagName('Sentence1')[0].childNodes[0].data.strip() + pair['sentence2'] = element.getElementsByTagName('Sentence2')[0].childNodes[0].data.strip() + pair['method_type'] = element.getElementsByTagName('MethodType')[0].childNodes[0].data.strip() + pair['judge'] = judge_number_to_text(element.getElementsByTagName('judge')[0].childNodes[0].data.strip()) + yield pair + + except Exception as e: + print('error in reading', filename, e, file=sys.stderr) + else: + print('error in reading file', filename, e, file=sys.stderr) + raise FileNotFoundError('error in reading file', filename) + + def pairs(self): + for pair in self.docs(): + yield pair['sentence1'], pair['sentence2'], pair['judge'] diff --git a/hazm/__init__.py b/hazm/__init__.py index 6090f240..1b609559 100644 --- a/hazm/__init__.py +++ b/hazm/__init__.py @@ -11,6 +11,7 @@ from .TreebankReader import TreebankReader from .WikipediaReader import WikipediaReader from .SentiPersReader import SentiPersReader +from .DegarbayanReader import DegarbayanReader from .QuranCorpusReader import QuranCorpusReader from .TNewsReader import TNewsReader from .Normalizer import Normalizer diff --git a/tests.py b/tests.py index bae3d9bf..c3ed000b 100644 --- a/tests.py +++ b/tests.py @@ -13,6 +13,7 @@ 'valency': VerbValencyReader, 'treebank': TreebankReader, 'sentipers': SentiPersReader, + 'degarbayan': DegarbayanReader, 'tnews': TNewsReader, 'quran': QuranCorpusReader, 'sentence_tokenizer': SentenceTokenizer,