Python nltk不能标记阿拉伯语文本

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

当使用 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 anaconda nltk text-mining
2个回答
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').


0
投票

由于我没有 stop-words 列表,我无法对这部分进行处理,但 tokenization 部分似乎运行良好。

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

这是我收到的输出:

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

© www.soinside.com 2019 - 2024. All rights reserved.