python - 使用 nltk 雪球词干分析器将列中的值作为参数传递
问题描述
传递df[language]
适用于停用词,但不适用于雪球词干分析器。有没有办法解决这个问题?
到目前为止,我还没有真正找到任何线索...
import nltk
from nltk.corpus import stopwords
import pandas as pd
import re
df = pd.DataFrame([['A sentence in English', 'english'], ['En mening på svenska', 'swedish']], columns = ['text', 'language'])
def tokenize(text):
tokens = re.split('\W+', text)
return tokens
def remove_stopwords(tokenized_list, language):
stopword = nltk.corpus.stopwords.words(language)
text = [word for word in tokenized_list if word not in stopword]
return text
def stemming(tokenized_text, l):
ss = nltk.stem.SnowballStemmer(l)
text = [ss.stem(word) for word in tokenized_text]
return text
df['text_tokenized'] = df['text'].apply(lambda x: tokenize(x.lower()))
df['text_nostop'] = df['text_tokenized'].apply(lambda x: remove_stopwords(x, df['language']))
df['text_stemmed'] = df['text_nostop'].apply(lambda x: stemming(x, df['language']))
我希望它能够像删除停用词一样使用英语和瑞典语作为语言进行雪球词干提取。我收到error
如下消息:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
解决方案
试试这个。
df['text_stemmed']=df.apply(lambda x: stemming(x['text_nostop'], x['language']), axis=1)
编辑:当您在apply
特定列df['text_tokenized'].apply(lambda x: ...)
(text_tokenized
如df['language']
也就是说,当您尝试时lambda x: remove_stopwords(x, df['language'])
,返回的值df['language']
不是相应行的某个“语言”值,而是包含“英语”和“瑞典语”的熊猫系列。
0 english
1 swedish
所以你的第二个代码apply
也应该改变:
df['text_nostop'] = df.apply(lambda x: remove_stopwords(x['text_tokenized'], x['language']), axis=1)
推荐阅读
- api - 无法使用带有工作 api 的 http.get 获取数据
- javascript - 为什么即使在 express 中调用 next() 之后,底层代码也会在一个块中执行?
- angular - window.scroll(0,0) 不适用于 Angular 10
- javascript - 嵌入消息未发送到指定通道
- c++ - 尝试将控制台输出重定向到文本文件时,C++ 程序不会启动
- ios - SwiftUI TabView 和 NavigationView 混合 - Pop To Root 不起作用
- sql - 在不使用任何子查询的情况下按部门获得最高薪水
- java - 如何获取 MySQL 连接器 Java Maven 依赖项
- javascript - 如何在 Nuxtjs 中转到父页面
- haskell - 如何在 Haskell 中的通用“超级类型”下拥有多种类型?