我是跨境电商从业者,前两天学了点 Python ,百度后试着自己写了段代码,希望能实现以下功能:
将导入进 xlsx 的用户搜索词进行词频统计,用于标题拟定和关键词填写。
查询资料后,把这个要求拿出了自己的实现方法:
- 使用 pandas 库,从 test.xlsx 中导入关键词
- 使用 split() 方法,或者 nltk 库中的 word_tokenize 模块,来进行分词
- 使用 nltk 库中的 WordNetLemmatizer 模块,对分词后的结果进行词性还原
- 对词性还原后的结果,进行词频统计
- 把结果写进 results.xlsx 文件中
但是当工作开始后,我遇到以下问题: - pandas 库导入的数据是 DataFrame 类型,而 word_tokenize 模块只认 string
为了解决此问题,我转而使用 split() 方式。
可是使用 split() 方式后,一万多条关键词,只有前几十条被分词。
于是我转而试图将结果转换为 string ,再分词,我使用的是 str() 函数。
使用 str() 函数后,word_tokenize 模块还是不能用,变量管理器里一个结果都没有。
但是 split() 方式可以用了。
只是返回的结果中有中括号和引号。
我转而放下这个问题,把接下来几个问题解决了。
其中,写入 xlsx 文件被放弃,改成写进 test.csv 文件。
当我回头准备解决中括号和引号的问题时,我开始渐渐绝望,因为我试了最常用的 join 方法,仍然有中括号和引号。
其他的一些方法,要么我看不明白,要么就是用不了。
附上源码:
#!/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链接是坚果云,未注册用户也可以下载。