dataframe某列是英文text,怎么提取关键词与之关联的其它某列权重,保留权重高的几个词语,举例
时间: 2023-09-19 21:09:59 浏览: 128
可以使用Python中的nltk库进行关键词提取,并结合pandas库进行数据处理。
具体步骤如下:
1. 导入所需库
```
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
```
2. 读取数据
假设我们有一个名为df的数据框,其中包含两列数据:text和weight。
```
df = pd.read_csv('data.csv')
```
3. 定义关键词提取函数
```
def extract_keywords(text, weight, num_keywords=5):
# 将文本转换为小写
text = text.lower()
# 分词
tokens = word_tokenize(text)
# 移除停用词
stop_words = set(stopwords.words('english'))
tokens = [t for t in tokens if t not in stop_words]
# 计算词频
freq_dist = FreqDist(tokens)
# 按权重排序
sorted_words = sorted(freq_dist.items(), key=lambda x: weight[x[0]], reverse=True)
# 提取关键词
keywords = [w[0] for w in sorted_words[:num_keywords]]
return keywords
```
这个函数接受三个参数:text表示要提取关键词的文本,weight表示与文本相关联的权重,num_keywords表示要提取的关键词数量。该函数的返回值是一个包含关键词的列表。
4. 应用关键词提取函数
```
df['keywords'] = df.apply(lambda row: extract_keywords(row['text'], row['weight']), axis=1)
```
这个代码将apply函数应用于数据框的每一行。apply函数接受一个函数作为参数,并将该函数应用于每一行。在这里,我们将extract_keywords函数作为apply函数的参数,并使用lambda函数将text和weight传递给该函数。
5. 保留权重高的几个词语
```
def extract_top_keywords(text, weight, num_keywords=5, num_top=3):
keywords = extract_keywords(text, weight, num_keywords)
top_keywords = sorted(keywords, key=lambda x: weight[x], reverse=True)[:num_top]
return top_keywords
df['top_keywords'] = df.apply(lambda row: extract_top_keywords(row['text'], row['weight']), axis=1)
```
这个代码与之前的代码类似,只是在extract_keywords函数的基础上添加了一个num_top参数,用于保留权重高的几个词语。在这里,我们使用sorted函数对关键词进行排序,并使用切片操作保留前num_top个关键词。
综上,完整的代码如下:
```
import pandas as pd
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.probability import FreqDist
def extract_keywords(text, weight, num_keywords=5):
# 将文本转换为小写
text = text.lower()
# 分词
tokens = word_tokenize(text)
# 移除停用词
stop_words = set(stopwords.words('english'))
tokens = [t for t in tokens if t not in stop_words]
# 计算词频
freq_dist = FreqDist(tokens)
# 按权重排序
sorted_words = sorted(freq_dist.items(), key=lambda x: weight[x[0]], reverse=True)
# 提取关键词
keywords = [w[0] for w in sorted_words[:num_keywords]]
return keywords
def extract_top_keywords(text, weight, num_keywords=5, num_top=3):
keywords = extract_keywords(text, weight, num_keywords)
top_keywords = sorted(keywords, key=lambda x: weight[x], reverse=True)[:num_top]
return top_keywords
df = pd.read_csv('data.csv')
df['keywords'] = df.apply(lambda row: extract_keywords(row['text'], row['weight']), axis=1)
df['top_keywords'] = df.apply(lambda row: extract_top_keywords(row['text'], row['weight']), axis=1)
```
其中,data.csv是一个包含text和weight列的csv文件。
阅读全文