济南网站运营,2003年北京网站建设,长沙生活信息网,贵州省城乡和建设厅网站首页环境#xff1a;python3.6库#xff1a;jieba#xff0c;xlwt#xff0c;xlwings#xff0c;collections前两天有个需求要对一张表里的中文语句进行分词#xff0c;并统计每个词语出现的次数。表格1231.xlsx大致内容如下#xff1a;由于表格内容过大#xff0c;约有100…环境python3.6库jiebaxlwtxlwingscollections前两天有个需求要对一张表里的中文语句进行分词并统计每个词语出现的次数。表格1231.xlsx大致内容如下由于表格内容过大约有100W条数据普通读取表格的方式效率非常慢所以这次用的方法是xlwingsxlwings是目前看来操作excel最快速、做的比较完善的一个库优化很好调用方式非常灵活。对读取大表格的有很高的效率以下是完整的代码import jiebaimport xlwt, xlrdimport xlwings as xwfrom collections import Counter# 定义一个空列表all_word_list []# 分词def trans_CN(text):# 接收分词的字符串word_list jieba.cut(text)# 分词后在单独个体之间加上空格result .join(word_list)# 转换成listresult result.split( )return result# 判断词是否为中文def is_Chinese(word):for ch in word:if \u4e00 ch \u9fff:return Truereturn Falsestart_row 2 # 处理Excel文件开始行end_row 1000000 # 处理Excel结束行# 指定不显示地打开Excel读取Excel文件app xw.App(visibleFalse, add_bookFalse)wb app.books.open(r./1231.xlsx) # 打开Excel文件sheet wb.sheets[9] # 选择第0个表单# 读取Excel表单前1000000行的数据读取Excel表单前1000000行的数据for row in range(start_row, end_row):print(row)row_str str(row)# 循环中引用Excel的sheet和range的对象读取C列的每一行的值content_text sheet.range(C row_str).value# print(content_text)if not content_text:continueif not isinstance(content_text, str):continue# 长度小于4的语句 过滤if len(content_text) 3:word_list trans_CN(content_text)print(分词后, word_list)# 判断列表元素是否为中文将非中文词移除for s in word_list:if not is_Chinese(s):word_list.remove(s)all_word_list word_list# 统计列表中元素出现的频率counter Counter(all_word_list)print(统计频率完成)# 将列表中的元素按照频率大小排序result_list sorted(counter.items(), keylambda x: x[1], reverseTrue)# 将结果写入表格print(开始写入表格)myWorkbook xlwt.Workbook()mySheet myWorkbook.add_sheet(Sheet1, cell_overwrite_okTrue)rows 0for i in result_list:mySheet.write(rows, 0, i[0])mySheet.write(rows, 1, i[1])rows 1myWorkbook.save(result.xls)# 保存并关闭Excel文件wb.save()wb.close()运行完成后保存为result.xls,查看结果:A列为分词B列为该词出现的次数