我在Python 2.7 shell中尝试了以下内容:
>>> from nltk.stem.isri import ISRIStemmer
>>> st = ISRIStemmer()
>>> string = u'\u062D\u064E\u062F\u0651\u064E\u062B\u064E\u0646\u064E\u0627'
>>> st.stem(string)
u'\u062d\u062f\u062b'
所以基本上,我试图获得:
u'\u062d\u062f\u062b'
这
u'\u062D\u064E\u062F\u0651\u064E\u062B\u064E\u0646\u064E\u0627'
使用nltk的阿拉伯语词干分析器,它有效!
然而,当我尝试通过python脚本完成确切的事情时,它无法阻止列表中的任何单词,tokens
:
#!/c/Python27/python
# -*- coding: utf8 -*-
import nltk
import nltk.data
from nltk.stem.isri import ISRIStemmer
#In my script, I tokenize the following string
commasection = '\u0623\u064E\u062E\u0652\u0628\u064E\u0631\u064E\u0646\u064E\u0627 \u0628\u0650\u0634\u0652\u0631\u064F \u0628\u0652\u0646\u064F \u0647\u0650\u0644\u0627\u064E\u0644\u064D'
#The tokenizing works
tokens = nltk.word_tokenize(commasection)
st = ISRIStemmer()
for word in tokens:
#But the stemming of each word in tokens doesn't work????
print st.stem(word)
#Should display
#u'u0623\u062e\u0628\u0631'
#u'\u0628\u0634\u0631'
#u'\u0628\u0646'
#u'\u0647\u0644\u0644'
#But it just shows whatever is in commasection
我需要我的python代码来阻止tokens
中的所有单词。但我不知道在python shell中运行的简单示例是如何工作的,而不是这个脚本。
我注意到在shell场景中,有一个' u'在unicode序列的前面,所以我尝试了各种各样的编码/解码,并整晚阅读了很多关于它的事情(在这个上拉了一个全明星),但是这个python脚本并没有阻止word
来自tokens
,比如python shell !!!
如果有人可以帮助我让我的脚本显示正确的结果,我会超级赞赏
答案 0 :(得分:1)
Unicode转义仅适用于unicode
文字。
commasection = u'\u0623\u064E\u062E\u0652\u0628\u064E\u0631\u064E\u0646\u064E\u0627 \u0628\u0650\u0634\u0652\u0631\u064F \u0628\u0652\u0646\u064F \u0647\u0650\u0644\u0627\u064E\u0644\u064D'
答案 1 :(得分:0)
Ignacio是正确的,我必须有unicode文字才能使词干工作,但由于我动态地抓住这个字符串,我必须找到一种方法来转换我动态得到的东西
即。 '\u0623\u064E\u062E\u0652\u0628\u064E\u0631\u064E\u0646\u064E\u0627 \u0628\u0650\u0634\u0652\u0631\u064F \u0628\u0652\u0646\u064F \u0647\u0650\u0644\u0627\u064E\u0644\u064D'
进入带有unicode转义的字符串文字,即
u'\u0623\u064E\u062E\u0652\u0628\u064E\u0631\u064E\u0646\u064E\u0627 \u0628\u0650\u0634\u0652\u0631\u064F \u0628\u0652\u0646\u064F \u0647\u0650\u0644\u0627\u064E\u0644\u064D'
(注意前面的u
)
可以使用以下unichr()http://infohost.nmt.edu/tcc/help/pubs/python/web/unichr-function.html完成此操作:
word = "".join([unichr(int(x, 16)) for x in word.split("\\u") if x !=""])
所以基本上我抓住数字代码并形成unicode字符,同时保持unicode转义。我的主干工作了!