(九)jieba分詞後,無法去除停用詞的解決方法

2021-09-19 17:15:28 字數 2447 閱讀 9627

import chardet

if __name__ == '__main__':

f = file2file()

s = '中國是個好地方,我住在這裡。'

stopwords = set(sum(f.readtxt('../data/hitstopwords.txt'), ))

# 檢視s字符集

s_charset = chardet.detect(s)

# jieba

cut = jieba.lcut(s)

# 下面這句一直會報錯

# cut_charset = chardet.detect(cut[0])

# # 編碼處理部分:begin

# k =

# for each in cut:

# # 編碼處理部分:end

# 去停用詞,注意把cut換成k

cut__stop_data = [word for word in cut if word not in stopwords]

# cut__stop_data = [word for word in k if word not in stopwords]

# 寫入本地

open('test.txt', 'w').write(' '.join(cut__stop_data))

print('------------------run over-----------------')

如果不去掉注釋「編碼處理部分」,cut_stop_data中的停用詞是去不掉的。寫入本地也會報錯

chardet.detect原始碼,這也是為什麼code中那一行會一直報錯:

pic1:cut中每個都是unicode,停用詞list中則是str,所以無法去掉cut中的停用詞

pic2:jieba後,cut元素為unicode,所以「cut_charset = chardet.detect(cut[0])

」一直報錯

pic3:對比cut和cut_stop_data,停用詞確實沒有去掉

pic4:寫入檔案時也會報錯

pic5:去掉注釋「編碼處理部分」,處理cut中的每一項後,成功去掉了停用詞,寫入檔案也正常

pic6:「編碼處理部分」**效果:

cut–stopwords:去除失敗;k–stopwords:去除成功

分詞後,cut中每個都是unicode物件,而不是str物件(見pic7),從上面debug中可見,stopwords中每個都是str物件。

這兩個物件,無法比較,所以不處理cut的話,就無法去除cut中的停用詞。

這也是寫入檔案失敗的原因。

pic7:檢視cut元素所屬類。結果是unicode,而非str

jieba 利用jieba分詞

目錄 三種分詞模式 新增自定義詞典進行分詞 jieba提供了三種分詞模式,分別是全模式,精確模式和搜尋引擎模式。全模式下會將所有可能的詞語都進行分詞,精確模式下會盡可能的將句子精確切開,搜尋引擎模式實在精確模式的基礎上,對長詞再進行劃分,提高分詞的召回率。使用cut和cut for search即可...

jieba分詞原理

關於jieba分詞的原理,在平時做文字方面的演算法時沒有仔細研究過,昨晚在網上看了一篇部落格,寫的很全面很詳細,其中有些深入的部分還並沒有完全看懂。jieba分詞系統介紹 涉及演算法 基於字首詞典實現詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 dag 採用動態規劃查詢最大概率路徑,找...

Jieba分詞簡介

jieba分詞官網 jieba提供了三種分詞模式 精確模式,試圖將句子最精確地切開,適合文字分析 全模式,把句子中所有的可以成詞的詞語都掃瞄出來,速度非常快,但是不能解決歧義 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。import jieba sent 用刀...