예제 #1
0
def test2():
    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    asl = ArabicLightStemmer()
    words = [
        (u'أفتضاربانني', u'ضرب'),
        (u'بأبأ', u'بءبء'),
        (u'يريدون', u'ريد'),
        (u'يستطعن', u'ريد'),
        (u'كتاب', u'كتب'),
        (u"بالميدان", u'ميد'),
        (u"بالأسيهم", u'سهم'),
        (u"آخرين", u'ءخر'),
        (u"بالأخرة", u'ءخر'),
    ]
    for word, root in words:
        print(u"**********%s*********" % word)
        asl.light_stem(word)
        asl.segment(word)
        print(asl.get_segment_list())
        seg_list = asl.get_segment_list()
        seg_list = asl.get_segment_list()
        starstem_list = []
        affixa_list = asl.get_affix_list()
        #~ root_result = choose_root(affixa_list, debug=True)
        root_result = choose_root(word, affixa_list, debug=True)
        print(root_result, root_result == root)
    return 0
def test2():

    #test with tashaphyne
    #~ rootslib.create_stamped_roots()
    #~ rootslib.create_virtual_roots()
    #~ print repr(rootslib.VIRTUAL_DICT).replace('],','],\n').decode('unicode-escape').encode('utf8')
    from tashaphyne.stemming import ArabicLightStemmer
    asl = ArabicLightStemmer()
    asl_custom = abstractstemmer.customStemmer_roots()
    words = [(u'أفتضاربانني',u'ضرب'),
    (u'بأبأ',u'بءبء'),
    (u'يريدون',u'ريد'),
    (u'يستطعن', u'طوع'),
    (u'يستطيعون', u'طوع'),
    (u'الصيام', u'صوم'),
    (u'يخاف', u'خوف'),
    (u'كتاب',u'كتب'),
    (u"بالميدان",u'ميد'),
    (u"بالأسيهم",u'سهم'),
    (u"آخرين",u'ءخر'),
    (u"بالآخرة",u'ءخر'),    
    (u"لارتاب",u'ريب'),    
    (u"وسائل",u'وسل'),    
    (u"وصائل",u'وصل'),    
    (u"أخاه",u'ءخو'),    
    (u"أخوه",u'ءخو'),    
    (u"أخاهم",u'ءخو'),    
    (u"أخانا",u'ءخو'),  
    (u"بإذن",u'ءذن'), 
    (u"للأبرار",u"برر"),
    (u'واتبعوا', u'تبع'),
    (u'والكاظمين', u'كظم'),
    (u'عد', u'عود'),


  
    
    ]
    # load root dictionary with features
    rootdict = rootslibclass.rootDict()
    for word, root in words:
        print(u"**********%s*********"%word).encode('utf8')
        word = re.sub(u"[%s]"%(araby.ALEF_MADDA), araby.HAMZA+araby.ALEF, word)

        asl.light_stem(word)
        asl.segment(word)
        print asl.get_segment_list()  
        seg_list = asl.get_segment_list()  
        starstem_list =[]
        affixa_list = asl.get_affix_list()
        print repr(affixa_list).replace('},','},\n').decode('unicode-escape').encode('utf8')
        #~ root_result = rootslib.choose_root(affixa_list, debug=True)
        root_result = rootdict.choose_root(affixa_list, debug=True)
        #~ root_result2 = rootdict.choose_root(affixa_list, debug=True)
        #~ print root_result.encode('utf8'),root_result2.encode('utf8'), asl_custom.getroot(word).encode('utf8'), root_result == root, root_result == root_result2
        print root_result.encode('utf8'), asl_custom.getroot(word).encode('utf8'), root_result == root
        
    return 0
예제 #3
0
def test_rooter(dataframe_result):
    """
    """
    from pyarabic.arabrepr import arepr
    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    import rootslibclass
    asl = ArabicLightStemmer()
    rooter = rootslibclass.rootDict(algos=['rhyzome'])
    # debug in rhyzome rooter
    rooter.rhyzome_rooter.debug = True
    #~ rooter = rootslibclass.rootDict()
    df = dataframe_result
    # avoid null roots

    #~ total = df.size
    total = len(df.index)
    cpt = 0
    for word, root in zip(df["word"], df["root"]):
        root_list = root.split(';')
        print((u"**********%s*********" % word).encode('utf8'))
        asl.light_stem(word)
        print((u"Start Word : %s" % asl.get_starword()).encode('utf8'))

        word = re.sub(u"[%s]" % (araby.ALEF_MADDA), araby.HAMZA + araby.ALEF,
                      word)

        asl.segment(word)
        print(asl.get_segment_list())
        seg_list = asl.get_segment_list()
        starstem_list = []
        affixa_list = asl.get_affix_list()
        # stems prints
        stems = [d['stem'] for d in affixa_list]
        print("Stems: " + u' '.join(stems).encode('utf8'))
        roots = [d['root'] for d in affixa_list]
        print((u"Dafault roots: [%s] a %s" %
               (asl.get_root(), u' '.join(roots))).encode('utf8'))
        #~ root_result = rooter.choose_wazn_root(affixa_list, debug=True)
        root_result = rooter.choose_root(word, affixa_list, debug=True)
        #~ print(u"Test root",root_result.encode('utf8'), u"found root",root_result.encode('utf8'), root_result == root)
        print((u" ".join([
            u"Test root", root, u"found root", root_result,
            str(root_result in root_list)
        ])).encode('utf8'))
        if root_result in root_list:
            cpt += 1
    print("***** Percent %.2f%% [%d/%d]" % (cpt * 100.0 / total, cpt, total))
예제 #4
0
def test_matrix(dataframe_result):
    """
    """
    from pyarabic.arabrepr import arepr
    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    import rootslibclass
    asl = ArabicLightStemmer()
    rooter = rootslibclass.rootDict() 
    rooter.debug = True 
    #test with tashaphyne
    df = dataframe_result
    total = df.size
    cpt = 0
    for word, root in zip(df["word"], df["root"]):
        print((u"**********%s*********"%word).encode('utf8'))
        asl.light_stem(word)
        print((u"Start Word : %s"%asl.get_starword()).encode('utf8'))        
        
        asl.segment(word)
        print(asl.get_segment_list()  )
        seg_list = asl.get_segment_list()  
        starstem_list =[]
        affixa_list = asl.get_affix_list()
        # stems prints 
        stems = [ d['stem'] for d in affixa_list]
        roots = []
        for stem in stems:
            temp_list = rooter.matrix_root(stem,u'توطيدا')
            tmp_roots = [d['root'] for d in temp_list]
            roots.extend(tmp_roots)
            #~ tmp_roots = [d['root'] for d in temp_list if rooter.is_root(d['root'])]
        print((u"Candidats " + u"\t".join(roots)).encode('utf8'))
        # lookup only one time by root in dictionary
        set_roots = [x for x in set(roots) if rooter.is_root(x)]
        # remove invalid roots and keep repetition
        roots = [x for x in roots if x in set_roots]
        root_result = most_common(roots)
        print((u"Accepted " + u"\t".join(roots)).encode('utf8'))
        print((u"root " + root_result).encode('utf8'))
        print((u" ".join([u"Test root", root, u"found root",
        root_result, str(root_result == root)])).encode('utf8'))
        if root_result == root:
            cpt += 1
    print("***** Percent %.2f%%"%(cpt*100/total))        
예제 #5
0
def test_rooter_matrix(dataframe_result):
    """
    """
    from pyarabic.arabrepr import arepr
    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    import rootslibclass
    asl = ArabicLightStemmer() 
    rooter = rootslibclass.rootDict()       
    df = dataframe_result
    total = df.size
    cpt = 0
    for word, root in zip(df["word"], df["root"]):
        print((u"**********%s*********"%word).encode('utf8'))
        asl.light_stem(word)
        root_list = root.split(';')        
        print((u"Start Word : %s"%asl.get_starword()).encode('utf8'))        
        
        asl.segment(word)
        print(asl.get_segment_list()  )
        seg_list = asl.get_segment_list()  
        starstem_list =[]
        affixa_list = asl.get_affix_list()
        # stems prints 
        stems = [ d['stem'] for d in affixa_list]
        print("Stems: "+u' '.join(stems).encode('utf8'))        
        roots = [ d['root'] for d in affixa_list]
        print((u"Dafault roots: [%s] a %s"%(asl.get_root(),u' '.join(roots))).encode('utf8'))        
        #~ root_result = rooter.choose_wazn_root(affixa_list, debug=True)
        root_result = rooter.choose_root_matrix(word, affixa_list, debug=True)
        #~ print(u"Test root",root_result.encode('utf8'), u"found root",root_result.encode('utf8'), root_result == root)
        #~ print((u" ".join([u"Test root", root, u"found root",
        #~ root_result, str(root_result == root)])).encode('utf8'))
        #~ if root_result == root:
            #~ cpt += 1
        print((u" ".join([u"Test root", root, u"found root",
        root_result, str(root_result in root_list)])).encode('utf8'))
        if root_result in  root_list:
            cpt += 1            
    #~ print("***** Percent %.2f%%"%(cpt*100/total)) 
    print("***** Percent %.2f%% [%d/%d]"%(cpt*100.0/total, cpt, total))
예제 #6
0
def test3():
    from pyarabic.arabrepr import arepr
    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    asl = ArabicLightStemmer()
    rooter = rootDict()
    words = [
        (u'أفتضاربانني', u'ضرب'),
        #~ (u'بأبأ',u'بءبء'),
        #~ (u'يسعى',u'سعى'),
        #~ (u'يريدون',u'ريد'),
        #~ (u'يستطعن', u'ريد'),
        #~ (u'كتاب',u'كتب'),
        #~ (u"بالميدان",u'ميد'),
        #~ (u"بالأسيهم",u'سهم'),
        #~ (u"آخرين",u'ءخر'),
        #~ (u"بالأخرة",u'ءخر'),
        #~ ('ويرمي',u'رمي'),
        #~ (u'ويرمي',u'رمي'),
        #~ (u'يرمون',u'رمي'),
        #~ (u'راميات',u'رمي'),
        #~ (u'وترمون',u'رمي'),
        #~ (u'ويرمين',u'رمي'),
        #~ (u'وترميان',u'رمي'),
        #~ (u'ورامون',u'رمي'),
        #~ (u'وليرميان',u'رمي'),
        #~ (u'لترميان',u'رمي'),
        #~ (u'لترمين',u'رمي'),
        #~ (u'رامي',u'رمي'),
        #~ (u'ورامي',u'رمي'),
        #~ (u'رماية',u'رمي'),
        #~ (u'رمايه',u'رمي'),
        #~ (u'الراميات',u'رمي'),
        #~ (u'المرميات',u'رمي'),
        #~ (u'المتراميات',u'رمي'),
        #~ (u'مترامية',u'رمي'),
        #~ (u'مترامي',u'رمي'),
        #~ (u'الرامون',u'رمي'),
        #~ (u'والراميات',u'رمي'),
        #~ (u'وسيقولون',u'قول'),
        #~ (u'وسيقال',u'قول'),
        #~ (u'وسيقيلوهم',u'قول'),
        #~ (u'وتقال',u'قول'),
        #~ (u'وتقولوا',u'قول'),
        #~ (u'وتقول',u'قول'),
        #~ (u'ومقاول',u'قول'),
        #~ (u'وقالوا',u'قول'),
        #~ (u'ومقال',u'قول'),
        (u'وتقل', u'قول'),
        (u'وتقلن', u'قول'),
        (u'وليقل', u'قول'),
        (u'ولتقلنا', u'قول'),
        (u'لتقل', u'قول'),
        (u'تقل', u'قول'),
        (u'ونقل', u'قول'),
        (u'ولنقل', u'قول'),
        (u'فتقل', u'قول'),
        (u'ستقل', u'قول'),
        (u'ستقلن', u'قول'),
        (u'وستقلن', u'قول'),
        (u'فستقل', u'قول'),
        (u'وقالوا', u'قول'),
        (u'قالوا', u'قول'),
        (u'وقالا', u'قول'),
        (u'قالا', u'قول'),
        (u'وقالت', u'قول'),
        (u'قالت', u'قول'),
        (u'ويقال', u'قول'),
        (u'يقال', u'قول'),
        (u'وسيقال', u'قول'),
        (u'سيقال', u'قول'),
        (u'ويقلن', u'قول'),
        (u'يقلن', u'قول'),
        (u'ويقلنا', u'قول'),
        (u'يقلنا', u'قول'),
        (u'وتقال', u'قول'),
        (u'تقال', u'قول'),
        (u'وقال', u'قول'),
        (u'قال', u'قول'),
        (u'وسأقول', u'قول'),
        (u'سأقول', u'قول'),
        (u'وقائل', u'قول'),
        (u'قائل', u'قول'),
        (u'وقائلان', u'قول'),
        (u'قائلان', u'قول'),
        (u'وقائلون', u'قول'),
        (u'قائلون', u'قول'),
        (u'وقائلا', u'قول'),
        (u'قائلا', u'قول'),
        (u'ومقال', u'قول'),
        (u'مقال', u'قول'),
        (u'وقائلتان', u'قول'),
        (u'قائلتان', u'قول'),
        (u'يعد', u'وعد'),
        (u'تعد', u'عدد'),
        (u'نعدهم', u'عدد'),
        (u'وتعدهم', u'وعد'),
        (u'تعدهم', u'وعد'),
        (u'وستعدهم', u'وعد'),
        (u'ستعدهم', u'وعد'),
        (u'وتعدهما', u'وعد'),
        (u'تعدهما', u'وعد'),
        (u'ويعدهم', u'وعد'),
        (u'يعدهم', u'وعد'),
        (u'ويعدهما', u'وعد'),
        (u'يعدهما', u'وعد'),
        (u'وسيعدهم', u'وعد'),
        (u'سيعدهم', u'وعد'),
        (u'وسيعدهما', u'وعد'),
        (u'سيعدهما', u'وعد'),
        (u'ولنعدهم', u'وعد'),
        (u'لنعدهم', u'وعد'),
        (u'ولنعدهما', u'وعد'),
        (u'لنعدهما', u'وعد'),
        (u'ولتعدهم', u'وعد'),
        (u'لتعدهم', u'وعد'),
        (u'ولتعدهما', u'وعد'),
        (u'لتعدهما', u'وعد'),
        (u'ولتعدها', u'وعد'),
        (u'لتعدها', u'وعد'),
        (u'وستعدها', u'وعد'),
        (u'ستعدها', u'وعد'),
        (u'ووعدها', u'وعد'),
        (u'وعدها', u'وعد'),
        (u'ووعدهم', u'وعد'),
        (u'وعدهم', u'وعد'),
        (u'ووعدهما', u'وعد'),
        (u'وعدهما', u'وعد'),
        (u'وتعد', u'وعد'),
        (u'تعد', u'وعد'),
        (u'وتعدني', u'وعد'),
        (u'تعدني', u'وعد'),
        (u'وتعدنا', u'وعد'),
        (u'تعدنا', u'وعد'),
        (u'وتعده', u'وعد'),
        (u'تعده', u'وعد'),
        (u'وواعدناهم', u'وعد'),
        (u'واعدناهم', u'وعد'),
        (u'ووعدناهم', u'وعد'),
        (u'وعدناهم', u'وعد'),
        (u'وتعدوهم', u'وعد'),
        (u'تعدوهم', u'وعد'),
        (u'يعتاد', u'عود'),
        (u'أحست', u'حسس'),
        (u'يحسون', u'حسس'),
        (u'ثقة', u'وثق'),
        (u'ثقات', u'وثق'),
        (u'بثقات', u'وثق'),
        (u'صفات', u'وصف'),
        (u'صلاته', u'وصل'),
    ]
    for word, root in words:
        print((u"**********%s*********" % word).encode('utf8'))
        asl.light_stem(word)
        asl.segment(word)
        print(asl.get_segment_list())
        seg_list = asl.get_segment_list()
        starstem_list = []
        affixa_list = asl.get_affix_list()
        stems = [d['stem'] for d in affixa_list]
        print(u' '.join(stems).encode('utf8'))
        #~ root_result = rooter.choose_wazn_root(affixa_list, debug=True)
        root_result = rooter.choose_root(word, affixa_list, debug=True)
        print("Test root", root_result.encode('utf8'), "found root",
              root_result.encode('utf8'), root_result == root)
    # test root_extension
    roots = [
        u"قل",
        u"دع",
    ]
    for rt in roots:
        extended = rooter.extend_root(rt)
        print(u"\t".join([rt, u";".join(extended)]).encode('utf8'))
    print('stamped roots', len(rooter.STAMP_DICT))
    print('stamped roots diff new',
          len(diff(rooter.STAMP_DICT, roots_const.ROOTS)))
    print('stamped roots removed',
          len(diff(roots_const.ROOTS, rooter.STAMP_DICT)))
    print('stamped roots max length',
          max((len(v), k, v) for k, v in rooter.STAMP_DICT.iteritems()))
    print('virtual roots', len(rooter.VIRTUAL_DICT))
    print('virtual roots diff',
          len(diff(rooter.VIRTUAL_DICT, roots_const.ROOTS)))
    print('virtual roots removed ',
          len(diff(roots_const.ROOTS, rooter.VIRTUAL_DICT)))
    print('virtual roots max length',
          max((len(v), k, v) for k, v in rooter.VIRTUAL_DICT.iteritems()))

    print('all roots', len(roots_const.ROOTS))

    return 0
예제 #7
0
def test1(args):
    word = u"لعلهم"
    print(is_root(word))
    word = u"علم"
    print(is_root(word))

    #test with tashaphyne
    from tashaphyne.stemming import ArabicLightStemmer
    asl = ArabicLightStemmer()
    words = [
        u'أفتضاربانني',
        u'بأبأ',
        u'يريدون',
        u'يستطعن',
        u'كتاب',
        u"بالميدان",
        u"بالأسيهم",
    ]
    ext = extend_root(u"رم")
    print("extende")
    print(repr(ext).decode('unicode-escape').encode('utf8'))

    for word in words:
        print(u"**********%s*********" % word)
        asl.light_stem(word)
        asl.segment(word)
        print(asl.get_segment_list())
        seg_list = asl.get_segment_list()
        starstem_list = []
        for seg in seg_list:
            left, right = seg
            starstem_list.append(asl.get_starstem(left, right))
        print("star stems")

        print(u"\t".join(starstem_list)).encode('utf8')
        filtered_starstem_list = filter(valid_starstem, starstem_list)
        print("filtred star stem")
        print(u"\t".join(filtered_starstem_list)).encode('utf8')
        for st in starstem_list:
            print(st, u"\t".join(valid_starstem(st)).encode('utf8'))
        affixation_list = asl.get_affix_list()
        stems = [d['stem'] for d in affixation_list]
        print("Candidats stems%s" % u'\t'.join(stems))
        for st in stems:
            print(st, u"\t".join(valid_starstem(st)).encode('utf8'))

        print(
            repr(affixation_list).replace(
                '},', '},\n').decode('unicode-escape').encode('utf8'))
        print("reduce")
        #~ affixation_list = filter(verify_affix, affixation_list)
        print(
            repr(affixation_list).replace(
                '},', '},\n').decode('unicode-escape').encode('utf8'))

        roots = [normalize_root(d['root']) for d in affixation_list]
        print("Candidats %s" % u'\t'.join(roots))
        # get uniq root
        accepted = set(filter(is_root, roots))
        print("accepted %s" % u'\t'.join(accepted))
        if not accepted:
            # try to extend roots

            extended_roots = []
            for x in roots:
                extended_roots.extend(extend_root(x))
            print("Candidats extended %s" % u'\t'.join(extended_roots))
            accepted = set(filter(is_root, extended_roots))
            print("accepted level2 %s" % u'\t'.join(accepted))
        print('root %s' % asl.get_root())
    #~ print repr(STAMP_DICT).replace('},','},\n').decode('unicode-escape').encode('utf8')
    return 0