Amb*_*us9 3 nltk stop-words lemmatization scikit-learn countvectorizer
我正在尝试从Skit-learn向CountVectorizer添加Lematization,如下所示
import nltk
from pattern.es import lemma
from nltk import word_tokenize
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __call__(self, text):
return [lemma(t) for t in word_tokenize(text)]
vectorizer = CountVectorizer(stop_words=stopwords.words('spanish'),tokenizer=LemmaTokenizer())
sentence = ["EVOLUCIÓN de los sucesos y la EXPANSIÓN, ellos juegan y yo les dije lo que hago","hola, qué tal vas?"]
vectorizer.fit_transform(sentence)
Run Code Online (Sandbox Code Playgroud)
这是输出:
[u',', u'?', u'car', u'decir', u'der', u'evoluci\xf3n', u'expansi\xf3n', u'hacer', u'holar', u'ir', u'jugar', u'lar', u'ler', u'sucesos', u'tal', u'yar']
Run Code Online (Sandbox Code Playgroud)
更新
这是出现的停用词,已经过词缀化:
u'lar',u'ler',u'der'
它限制所有单词,并且不会删除停用词。那么,有什么想法吗?
那是因为在停止词移除之前完成了词素化。然后,在所提供的停用词集中找不到经过修饰的停用词stopwords.words('spanish')。
有关CountVectorizer的完整工作顺序,请参阅此处的其他答案。它与TfidfVectorizer有关,但顺序相同。在该答案中,步骤3是词形化,而步骤4是停用词删除。
因此,现在要删除停用词,您有两个选择:
1)您对停用词集本身stop_words进行词组化,然后将其传递给CountVectorizer中的param。
my_stop_words = [lemma(t) for t in stopwords.words('spanish')]
vectorizer = CountVectorizer(stop_words=my_stop_words,
tokenizer=LemmaTokenizer())
Run Code Online (Sandbox Code Playgroud)
2)LemmaTokenizer本身包含停用词删除功能。
class LemmaTokenizer(object):
def __call__(self, text):
return [lemma(t) for t in word_tokenize(text) if t not in stopwords.words('spanish')]
Run Code Online (Sandbox Code Playgroud)
尝试这些并发表评论(如果不起作用)。
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |