【问题标题】:How to stem a list of words in spanish with nltk?如何用 nltk 在西班牙语中提取单词列表?
【发布时间】:2014-12-05 05:05:18
【问题描述】:

如何使用 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) 的词干列表?以及如何将完整的意见小写?

【问题讨论】:

    标签: python string machine-learning nlp nltk


    【解决方案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)
    • 我猜是编码问题。
    • 为了避免这个问题@johndoe,你可以试试这个: text = unicode(text, 'utf-8')
    【解决方案2】:
    >>> 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'.']
    

    【讨论】:

    • 我在西班牙语编纂方面也遇到了麻烦,我能做些什么来保留口音和重要的标点符号?
    • 您是如何阅读文件的?你的脚本顶部有 # -*- coding: utf-8 -*- 吗?
    • 是的,这是# -*- coding: utf-8 -*-的输出:return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xed in position 6: invalid continuation byte
    • @johndoe 西班牙文文件经常用'latin-1'编码,你可以随时尝试。
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2021-07-27
    • 2020-01-13
    相关资源
    最近更新 更多