Python nltk 无法标记阿拉伯文本

Python nltk cannot tokenize Arabic text

当使用 nltk 包对阿拉伯文本进行分词时,结果显示为数字!分词英文文本没有问题。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 0: ordinal not in range(128)

# -*- coding: utf-8 -*-
import nltk
from nltk.tokenize import word_tokenize
import stop_words
from stop_words import get_stop_words
doc_a = "ذهب محمد الى المدرسه على دراجته. هذا اول يوم له في المدرسة"
sw = get_stop_words('ar')
tokens = nltk.word_tokenize(doc_a)
stopped_tokens = [i for i in tokens if not i in sw]
print(stopped_tokens)

设置时tokens = nltk.word_tokenize(unicode(doc_a,"utf-8"))

结果:

[u'\u0630\u0647\u0628', u'\u0645\u062d\u0645\u062f', u'\u0627\u0644\u0645\u062f\u0631\u0633\u0647', u'\u062f\u0631\u0627\u062c\u062a\u0647', u'.', u'\u0627\u0644\u0645\u062f\u0631\u0633\u0629']

对我来说,以下代码在 python 3.X 下对我有用:

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

doc_a = "ذهب محمد الى المدرسه على دراجته. هذا اول يوم له في المدرسة"
doc_a = doc_a.decode('utf-8')
sw = stopwords.words('arabic')
tokens = nltk.word_tokenize(doc_a)
stopped_tokens = [i for i in tokens if not i in sw]
for item in stopped_tokens:
    print(item)      

此行为您提供正确的停用词:sw = stopwords.words('arabic')

因为我没有 stop-words 列表,所以我无法处理那部分,但标记化部分似乎运行良好:

import nltk
from nltk.tokenize import word_tokenize
doc_a = "ذهب محمد الى المدرسه على دراجته. هذا اول يوم له في المدرسة"
tokens = nltk.word_tokenize(doc_a)
print(tokens)

这是我收到的输出:

['他去了', '穆罕默德', '去', '学校', '在', '他的自行车', '.', '这', '第一天', '那天', '他的'、'在'、'学校'