Python ISRIStemmer for Arabic text

孤人 提交于 2019-12-18 13:50:49

问题


I am running the following code on IDLE(Python) and I want to enter Arabic string and get the stemming for it but actually it doesn't work

">>> from nltk.stem.isri import ISRIStemmer

">>> st = ISRIStemmer()

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

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

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

The result of running it is the same text in w which is 'حركات' which is not the stem

but when do the following:

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

the result succeeded and returns the stem which is 'علم'

why passing variable to stem() function doesn't return the stem.


回答1:


Ok, I solved the problem by myself using the following:

w='حركات'

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

and it gives the root correctly which is "حرك"




回答2:


This code above won't work in Python 3 because we are trying to decode an object that is already decoded. So, there is no need to decode from UTF-8 anymore.

Here is the new code that should work just fine in Python 3.

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



回答3:


there is a new light arabicstemmer here developed with snowball framework




回答4:


Well, just notice that your two strings actually only differ by a mere "u" at the beginning of the second string :

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

But that tiny "u" made all the difference : w is a UTF8 string (default character encoding in Python), while w2 is a Unicode string.

Hence all you really need to do is make sure your string is defined as a Unicode string, and then you can use the stem function normally without any extra decoding step :

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



回答5:


You can use this snippet to directly stem text:

from nltk import word_tokenize

from nltk.stem.isri import ISRIStemmer

st = ISRIStemmer()

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

for a in word_tokenize(w):

    print(st.stem(a))


来源:https://stackoverflow.com/questions/21492480/python-isristemmer-for-arabic-text

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!