Python ISRIStemmer 用于阿拉伯文本的处理

5

我在IDLE(Python)上运行以下代码,想要输入阿拉伯字符串并得到其词干,但实际上它不起作用。

>>> from nltk.stem.isri import 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个回答

8

以上代码在Python 3中无法正常工作,因为我们试图解码已经解码的对象。因此,不再需要从UTF-8解码。

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

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

4

好的,我通过以下方法自己解决了问题:

w = 'حركات' 
st.stem(w.decode('utf-8'))

它正确地给出了根,即"حرك"


2
你可以使用这个片段直接对文本进行词干提取:

你可以使用这个代码片段直接对文本进行词干提取:

from nltk import word_tokenize

from nltk.stem.isri import ISRIStemmer

st = ISRIStemmer()

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

for a in word_tokenize(w):

    print(st.stem(a))

2

这里有一个新的光 arabicstemmer,使用Snowball框架开发。


1

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

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)

这是结果:

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

0

嗯,只是注意到你的两个字符串实际上只有第二个字符串开头的一个“u”不同:

w = 'حركات'
w2 = u'اعلاميون'

但是那个小小的“u”带来了很大的不同:w是UTF8字符串(Python中默认的字符编码),而w2是Unicode字符串。

因此,你只需要确保你的字符串被定义为Unicode字符串,然后就可以正常使用stem函数,而无需进行任何额外的解码步骤:

w = u'حركات'
print st.stem(w)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接