在对dateframe对象一列英文统计词云时剔除掉不相关的词同时只保留名词
时间: 2024-05-03 19:18:31 浏览: 103
使用Python向DataFrame中指定位置添加一列或多列的方法
4星 · 用户满意度95%
要在DataFrame对象的一列英文中统计词云并只保留名词,可以使用以下步骤:
1. 导入所需的库和模块:
```python
import pandas as pd
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from wordcloud import WordCloud
```
2. 加载数据:
假设数据保存在DataFrame对象的“text”列中。
```python
df = pd.read_csv("data.csv")
```
3. 清洗数据:
使用NLTK库中的函数进行数据清洗,包括分词、去除停用词、词形还原等操作。
```python
# 分词
df['tokens'] = df['text'].apply(lambda x: word_tokenize(str(x)))
# 去除停用词
stop_words = set(stopwords.words('english'))
df['tokens'] = df['tokens'].apply(lambda x: [word for word in x if not word.lower() in stop_words])
# 词形还原
lemmatizer = WordNetLemmatizer()
df['tokens'] = df['tokens'].apply(lambda x: [lemmatizer.lemmatize(word, pos='n') for word in x])
```
4. 统计名词:
使用NLTK库中的词性标注函数,将分词后的单词标注为名词、动词、形容词等,然后只保留名词。
```python
# 标注词性
df['pos_tags'] = df['tokens'].apply(nltk.pos_tag)
# 只保留名词
df['nouns'] = df['pos_tags'].apply(lambda x: [word[0] for word in x if 'NN' in word[1]])
```
5. 生成词云:
使用WordCloud库生成词云。
```python
# 将所有名词合并为一个字符串
all_nouns = ' '.join(df['nouns'].sum())
# 生成词云
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(all_nouns)
# 显示词云
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
```
这样就可以剔除不相关的词并只保留名词生成词云了。
阅读全文