如何使用nltk对西班牙语单词列表进行分词?

3
我该如何使用nltk snowballstemer筛选下列列表中的所有西班牙语单词?这是我尝试的方法:
# coding=utf-8


from sklearn.feature_extraction.text import CountVectorizer
import nltk.stem

vectorizer= CountVectorizer(min_df=1)

opinion = ["""
Hola compis!
No sabÌa como se ponÌa una lavadora hasta que conocÌ
esta y es que es muy sencilla de utilizar! Todo un gustazo
cuando estamos aprendiendo para emanciparnos, que si nos
ponen facilidad con las tareas de la casa pues mejor que mejor.


Antes de esta tenÌamos otra de la marca Otsein, de estas
que van incluidas en el mobiliario y adem·s era de carga superior,
pero tan antigua que seg˙n mi madre, nadie la podÌa tocar porque
solo la entendÌa ella.
Esta es de la marca Aeg y dentro de este tipo de lavadoras de
esta marca las habÌa m·s caras o m·s baratas y est· digamos que
est· en el punto medio. Es de color blanco y tiene carga frontal,
 con una capacidad de 6kg. En casa a pesar de ser cuatro,
 se ponen lavadoras casi todos o todos los dÌas.


En su parte de arriba encontramos la ";zona de mandos";,
donde se puede echar el detergente, aunque en nuestro caso
lo al ser gel lo ponemos directamente junto con la ropa.
Luego tiene la rueda para elegir el programa y los intermitentes
que indican en que paso del programa estaba.
Como todas tiene programas m·s cortos y m·s largos, incluso
un programa que seria como lavar a mano y otro ideal para
estores, que salen casi secos y planchaditos para colgar y
ya est·. Es muy f·cil de aprenderla y adem·s tiene indicador
por sonido de cuando acaba, lista para abrir y tender.
Saludillos!
"""]

spanish_stemmer = nltk.stem.SnowballStemmer('spanish')
print "\n these are the stems of opinion",
opinion = [[spanish_stemmer(word) for word in sentence.split(" ")]for sentence in opinion]

那种方法的问题在于以下内容是输出结果:
Traceback (most recent call last):
 these are the stems of opinion
  File "/Users/user/PycharmProjects/untitled/prueba stem.py", line 47, in <module>
    opinion = [[spanish_stemmer(word) for word in sentence.split(" ")]for sentence in opinion]
TypeError: 'SnowballStemmer' object is not callable

我该如何返回给定列表( opinion )的词干列表?并且如何将完整的意见转换为小写?
2个回答

17
>>> from nltk import word_tokenize
>>> from nltk.stem import SnowballStemmer
>>> stemmer = SnowballStemmer('spanish')
>>> 
>>> stemmer.stem('cuando')
u'cuand'
>>> stemmer.stem('apprenderla')
u'apprend'
>>> 
>>> text = 'En su parte de arriba encontramos la ";zona de mandos";, donde se puede echar el detergente, aunque en nuestro caso lo al ser gel lo ponemos directamente junto con la ropa.'
>>> stemmed_text = [stemmer.stem(i) for i in word_tokenize(text)]
>>> stemmed_text
[u'en', u'su', u'part', u'de', u'arrib', u'encontr', u'la', u'``', u';', u'zon', u'de', u'mand', u"''", u';', u',', u'dond', u'se', u'pued', u'echar', u'el', u'detergent', u',', u'aunqu', u'en', u'nuestr', u'cas', u'lo', u'al', u'ser', u'gel', u'lo', u'pon', u'direct', u'junt', u'con', u'la', u'rop', u'.']

我也遇到了西班牙编码的问题,有什么方法可以保留重音符号和重要的标点符号吗? - john doe
你是怎么读取文件的?你的脚本顶部有加上 # -*- coding: utf-8 -*- 吗? - alvas
是的,这是一个带有 # -*- coding: utf-8 -*- 的输出:return codecs.utf_8_decode(input, errors, True)。UnicodeDecodeError: 'utf8' 编解码器无法解码第6个位置的0xed字节:无效的连续字节。 - john doe
@johndoe,很多西班牙语文件通常使用“latin-1”编码,你可以尝试一下。 - Way Too Simple

1
尝试将最后一行更改为以下内容:

...
opinion = [[spanish_stemmer.stem(word) for word in sentence.split(" ")]for sentence in opinion]
...

`opinion = [[spanish_stemmer.stem(word) for word in sentence.split(" ")]for sentence in opinion] File "/usr/local/lib/python2.7/site-packages/nltk/stem/snowball.py", line 3405, in stem these are the stems of opinion r1, r2 = self._r1r2_standard(word, self.__vowels) File "/usr/local/lib/python2.7/site-packages/nltk/stem/snowball.py", line 236, in _r1r2_standard if r1[i] not in vowels and r1[i-1] in vowels: UnicodeDecodeError: 'ascii' codec can't decode byte 0x8c in position 0: ordinal not in range(128)` - john doe
我猜测这是一个编码问题。 - john doe
为了避免这个问题 @johndoe,你可以尝试这样做: text = unicode(text, 'utf-8') - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接