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 用刀...