使用ISRIStemmer在文件中阻止阿拉伯语文本时出错

时间:2016-09-04 11:19:20

标签: python nltk arabic

我正在尝试使用nltk.stem.isri在阿拉伯语中阻止文本文件(text.txt)的内容。 text.txt文件包含以下阿拉伯文本:

تتنوعالمشاعرالتييشعربهاالإنسانخلالحياته,وتكونهذهالمشاعرتبعالمواقفأوأشخاصمعينين,ويعتبرالحبأحدالمشاعرالجميلةالتيتصيبالإنسانفتغيرمننظرتهللعالممنحولهويصبحإيجابياأكثر,وهيالعلاقةالعاطفيةالتيتجمعبينالرجلوالمرأةأوبينالأشخاص المختلفينفيحياته,وماتجرهمنمشاعرالاهتماموالمودةواللطف。 الحبأيضاحالةمنالانجذابوالإعجاببينالأشخاص,ويقالبأنهنوعمنالكيمياءالمتبادلة,إذيعبرعننوعمنالتفاعلبينالناس,وفيالحبيفرزالجسمهرمونالأوكسيتوسينوهوالهرمونالذييدعىبهرمونالمحبينوالمحبةالذييفرزهالجسمفوراللقاءبينالأحبة,وفيمايليمنسطور سنتحدثعنبعضالمعلوماتالعامةحولالحببشيءمنالتفصيلوالتوضيح。

我通过参考上一个问题使用了以下代码:Python Stemming words in a File

# -*- coding: UTF-8 -*-

from nltk.stem.isri import ISRIStemmer
def stemming_text_1():
    with open('test.txt', 'r') as f:
        for line in f:
            print line
            singles = []

            stemmer = ISRIStemmer()
            for plural in line.split():
                singles.append(stemmer.stem(plural))
            print ' '.join(singles)

stemming_text_1()

它打印文件的内容并出现此错误:

/home/waheeb/anaconda2/lib/python2.7/site-packages/nltk/stem/isri.py:154:     UnicodeWarning: Unicode equal comparison failed to convert     both arguments to Unicode - interpreting them as being unequal
  if token in self.stop_words:
Traceback (most recent call last):
  File "Arabic_stem.py", line 15, in <module>
    stemming_text_1()
  File "Arabic_stem.py", line 12, in stemming_text_1
    singles.append(stemmer.stem(plural))
  File "/home/waheeb/anaconda2/lib/python2.7/site-packages/nltk/stem    /isri.py", line 156, in stem
    token = self.pre32(token)     # remove length three and length two     prefixes in this order
  File "/home/waheeb/anaconda2/lib/python2.7/site-packages/nltk/stem    /isri.py", line 198, in pre32
    if word.startswith(pre3):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 0:     ordinal not in range(128)

1 个答案:

答案 0 :(得分:1)

尝试将文件中的行解码为 unicode ,然后再将其传递给词干分析器。我假设您的输入文件编码为UTF8(似乎很可能会查看错误),但是,您可以将编码更改为适合:

for line in f:
    line = line.decode('utf8')    # use the correct encoding here
    ...

或者你可以使用io.open(),指定编码,Python会将传入的流解码为unicode:

with io.open('test.txt', encoding='utf8') as f:
    ...