nltk con't用Python标记阿拉伯语文本

时间:2018-03-09 12:36:01

标签: python anaconda nltk text-mining

当使用 nltk包 来标记阿拉伯语文本时,它会显示为数字! 标记化英文文本时没问题

  

UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd8:序数不在范围内(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'\ u0627 \ u0644 \ u0645 \ u062f \ u0633 \ u0633 \ u0629']

2 个答案:

答案 0 :(得分:0)

对我来说,以下代码在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')

答案 1 :(得分:0)

由于我没有停用词列表,我无法在那部分工作,但令牌化部分似乎运作良好:

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

这是我收到的输出:

['ذهب','محمد','الى','المدرسه','على','دراجته','。','هذا','اول','يوم','له','في ','المدرسة']