用于阿拉伯语文本的Python ISRIStemmer

时间:2014-02-01 00:17:39

标签: python utf-8 arabic stemming

我正在IDLE(Python)上运行以下代码,我想输入阿拉伯字符串并获取它,但实际上它不起作用

  
    
      来自nltk.stem.isri的

“>>>导入ISRIStemmer

             

“>>> st = ISRIStemmer()

             

“>>> w ='حركات'

             

“>>> join = w.decode('Windows-1256')

             

“>>> print st.stem(join).encode('Windows-1256')。decode('utf-8')

    
  

运行它的结果是w中的相同文本,即'حركات',它不是词干

但是在执行以下操作时:

  
    
      

“>>> print st.stem(u'اعلاميون')

    
  

结果成功并返回'علم'

的词干

为什么将变量传递给stem()函数不会返回词干。

6 个答案:

答案 0 :(得分:4)

好的,我自己使用以下方法解决了这个问题:

  
    

w ='حركات'

         

st.stem(w.decode( 'UTF-8'))

  

它正确地给出了根“حرك”

答案 1 :(得分:3)

上面的代码在Python 3中不起作用,因为我们正在尝试解码已经解码的对象。因此,不再需要从UTF-8解码。

以下是在Python 3中应该可以正常工作的新代码。

import nltk
from nltk.stem.isri import ISRIStemmer
st = ISRIStemmer()
w= 'حركات'
print(st.stem(w))

答案 2 :(得分:1)

这里有一个用雪球框架开发的新光arabicstemmer

答案 3 :(得分:0)

嗯,请注意,你的两个字符串实际上只是仅仅是因为" u"在第二个字符串的开头:

<?php
     $id = $_POST['id'];
?>

但那个小小的&#34; u&#34;完全不同:w = 'حركات' w2 = u'اعلاميون' 是一个UTF8字符串(Python中的默认字符编码),而w是一个Unicode字符串。

因此,您真正需要做的就是确保您的字符串被定义为Unicode字符串,然后您可以正常使用w2函数而无需任何额外的解码步骤:

stem

答案 4 :(得分:0)

您可以使用此代码段直接提取文本:

from nltk import word_tokenize

from nltk.stem.isri import ISRIStemmer

st = ISRIStemmer()

w= " البحث العلمي أو البحث أو التجربة التنموية هو أسلوب منظم في جمع المعلومات الموثوقة وتدوين الملاحظات والتحليل الموضوعي لتلك المعلومات باتباع أساليب ومناهج علمية محددة بقصد التأكد من صحتها أو تعديلها أو إضافة الجديد لها، ومن ثم التوصل إلى بعض القوانين والنظريات والتنبؤ بحدوث مثل هذه الظواهر والتحكم في أسبابها"

for a in word_tokenize(w):

    print(st.stem(a))

答案 5 :(得分:0)

这里是如何使用词干提取器的另一个示例(当然,您可以先删除停用词!)

from nltk import word_tokenize
from nltk.stem.isri import ISRIStemmer

st = ISRIStemmer()
word_list = "عرض يستخدم الى التفاعل مع المستخدمين في هاذا المجال !وعلمآ تكون الخدمه للستطلاع على الخدمات والعروض المقدمة"

# Define a function
def filter(word_list):
    wordsfilter=[]
    for a in word_tokenize(word_list):
        stem = st.stem(a)
        wordsfilter.append(stem)
    print(wordsfilter)

# Call the function
filter(word_list)

这是结果:

['عرض', 'خدم', 'الى', 'فعل', 'مع', 'خدم', 'في', 'هذا', 'جال', '!', 'علمآ', 'تكون', 'خدم', 'طلع', 'على', 'خدم', 'عرض', 'قدم']