我是跨境电商从业者,前两天学了点 Python ,百度后试着自己写了段代码,希望能实现以下功能:
将导入进 xlsx 的用户搜索词进行词频统计,用于标题拟定和关键词填写。
查询资料后,把这个要求拿出了自己的实现方法:
#!/usr/bin/python3
#coding=utf-8
import pandas as pd # 导入 pandas 模块,以读取 xlsx 文件
import collections # 导入 collection 模块,以实现词频统计
from nltk import word_tokenize, pos_tag # 分词
from nltk.corpus import wordnet # 导入 wordnet 模块,写入方法,将 tag 转换为 pos
from nltk.stem import WordNetLemmatizer # 导入词性还原模块,进行词性还原
def get_wordnet_pos(tag): # 定义一个方法,用来将 tag 转换为 pos
if tag.startswith('J'):
return wordnet.ADJ
elif tag.startswith('V'):
return wordnet.VERB
elif tag.startswith('N'):
return wordnet.NOUN
elif tag.startswith('R'):
return wordnet.ADV
else:
return None
keywords_data = pd.read_excel(r'C:\Users\cmoc\Downloads\test.xlsx', sheet_name='test') # 载入 test.xlsx 中的 test 表格
keywords_list = keywords_data.values.tolist() # 把读取的数据转换成列表
keywords_list_trans = []
for keyword_list in keywords_list:
# keyword_list.replace("'", "")
keywords_list_trans.append(keyword_list[0])
keywords = str.split(str(keywords_list_trans)) # 将product_data 转换为字符串,并进行分词
tagged_keywords = pos_tag(keywords) # 获取单词词性
wnl = WordNetLemmatizer()
keywords_lemmatized = []
for tag in tagged_keywords:
keyword_pos = get_wordnet_pos(tag[1]) or wordnet.NOUN
keywords_lemmatized.append(wnl.lemmatize(tag[0], pos=keyword_pos)) # 词形还原
results = collections.Counter(keywords_lemmatized).most_common() # 将得到的结果转换成列表,并进行排序
results_dict = dict(results) # 将排序后的结果列表转换成字典
results_df = pd.DataFrame.from_dict(results_dict, orient='index', columns=['Frequency'])
results_df.to_csv(r'C:\Users\cmoc\Downloads\test.csv', sep=',', header=True, index=True)
/%ra2转换为列表之后再用 " ".join()拼接成字符串不行吗?
pandas 库导入的数据是 DataFrame 类型, 那么就用pandas库处理列数据即可,将关键词那列的每行转换成字符串形式。