用于阿拉伯语文本的Python ISRIStemmer

问题描述 投票:0回答:5

我在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'Media')

结果成功并返回'علم'的词干

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

python utf-8 arabic stemming
5个回答
4
投票

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

w ='动作'

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

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


3
投票

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

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

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

1
投票

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


0
投票

好吧,请注意你的两个字符串实际上只是在第二个字符串的开头仅仅是“u”:

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

但是那个微小的“u”完全不同:w是一个UTF8字符串(Python中的默认字符编码),而w2是一个Unicode字符串。

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

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

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))
© www.soinside.com 2019 - 2024. All rights reserved.