词干提取器和词形还原器似乎都不太有效,我该怎么办?

3

我刚开始进行文本分析,正在尝试创建词袋模型(使用sklearn的CountVectorizer方法)。我有一个数据框架,其中包含一个文本列,包含像'acid','acidic','acidity','wood','woodsy','woody'这样的单词。

我认为'acid'和'wood'应该是最终输出中唯一包含的单词,但是stemming和lemmatizing似乎都无法实现这一点。

Stemming产生了'acid','wood','woodi','woodsi',而lemmatizing则产生了更差的输出结果:'acid','acidic','acidity','wood','woodsy','woody'。我猜想这是由于没有准确指定词性,但我不确定这个规范应该放在哪里。我已经在行X = vectorizer.fit_transform(df['text'],'a')中包含了它(我认为大多数单词应该是形容词),但是输出结果并没有改变。

我该怎么做才能改善输出结果呢?

我的完整代码如下:

!pip install nltk
nltk.download('omw-1.4')  
import nltk
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from nltk.stem import WordNetLemmatizer 

数据框:

df = pd.DataFrame()
df['text']=['acid', 'acidic', 'acidity', 'wood', 'woodsy', 'woody']

带有词干提取器的CountVectorizer:

analyzer = CountVectorizer().build_analyzer()
stemmer = nltk.stem.SnowballStemmer('english')
lemmatizer = WordNetLemmatizer()

def stemmed_words(doc):
    return (stemmer.stem(w) for w in analyzer(doc))

vectorizer = CountVectorizer(stop_words='english',analyzer=stemmed_words)
X = vectorizer.fit_transform(df['text'])
df_bow_sklearn = pd.DataFrame(X.toarray(),columns=vectorizer.get_feature_names())
df_bow_sklearn.head()

使用词形还原的CountVectorizer:

analyzer = CountVectorizer().build_analyzer()
stemmer = nltk.stem.SnowballStemmer('english')
lemmatizer = WordNetLemmatizer()

def lemed_words(doc):
    return(lemmatizer.lemmatize(w) for w in analyzer(doc))

vectorizer = CountVectorizer(stop_words='english',analyzer=lemed_words)
X = vectorizer.fit_transform(df['text'],'a')
df_bow_sklearn = pd.DataFrame(X.toarray(),columns=vectorizer.get_feature_names())
df_bow_sklearn.head()
1个回答

3
可能是wordnetlemmatizer和stemmer表现不佳的简单问题。
尝试不同的选项,如... Stemmers:
- Porter(->从nltk.stem导入PorterStemmer) - Lancaster(->从nltk.stem导入LancasterStemmer)
Lemmatizers:
- spacy(->导入spacy) - IWNLP(->从spacy_iwnlp导入spaCyIWNLP) - HanTa(->从HanTa导入HanoverTagger /注意:更多或更少是针对德语语言进行训练的)
我曾经遇到过相同的问题,切换到不同的Stemmer和Lemmatizer解决了这个问题。有关如何正确实施词干提取器和词形还原器的更详细说明,快速搜索网络可以找到所有情况的好例子。

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