python 大批量文本分詞 以及詞頻統計 (高效處理案例)

環境:python3.6

庫:jieba,xlwt,xlwings,collections

 

前兩天有個需求要對一張表裏的中文語句進行分詞,並統計每個詞語出現的次數。

表格1231.xlsx大致內容如下:

由於表格內容過大,約有100W條數據,普通讀取表格的方式效率非常慢,所以這次用的方法是xlwings,

xlwings是目前看來操作excel最快速、做的比較完善的一個庫,優化很好,調用方式非常靈活。對讀取大表格的有很高的效率

 

以下是完整的代碼:

import jieba
import xlwt, xlrd
import xlwings as xw
from collections import Counter

# 定義一個空列表
all_word_list = []

# 分詞
def trans_CN(text):
    # 接收分詞的字符串
    word_list = jieba.cut(text)
    # 分詞後在單獨個體之間加上空格
    result = " ".join(word_list)
    # 轉換成list
    result = result.split(" ")
    return result


# 判斷詞是否爲中文
def is_Chinese(word):
    for ch in word:
        if '\u4e00' <= ch <= '\u9fff':
            return True
    return False


start_row = 2  # 處理Excel文件開始行
end_row = 1000000  # 處理Excel結束行

# 指定不顯示地打開Excel,讀取Excel文件
app = xw.App(visible=False, add_book=False)
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:
        continue
    if 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(), key=lambda x: x[1], reverse=True)

# 將結果寫入表格
print("開始寫入表格")
myWorkbook = xlwt.Workbook()
mySheet = myWorkbook.add_sheet('Sheet1', cell_overwrite_ok=True)
rows = 0
for i in result_list:
    mySheet.write(rows, 0, i[0])
    mySheet.write(rows, 1, i[1])
    rows += 1
myWorkbook.save('result.xls')

# 保存並關閉Excel文件
wb.save()
wb.close()

運行完成後,保存爲result.xls,查看結果:

A列爲分詞,B列爲該詞出現的次數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章