生活随笔
收集整理的這篇文章主要介紹了
jieba分词并做分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Github:結(jié)巴分詞地址
https://github.com/fxsjy/jieba
幾種分詞方法的簡單使用: 一 . jieba
安裝、示例? ? ? pip install jieba,jieba分詞的語料是基于人民日報。
分詞示例
1 import jieba
2
3 str1 ='江州市長江大橋'
4 word_object = jieba.cut(str1) # 生成一個生成器對象
5 for each in word_object:
6 print each
我要的分詞結(jié)果是“江州/市長/江大橋”, 我需要自定義一個字典,給“江大橋”設(shè)置一個較大的頻次
當(dāng)我將 “江大橋” 頻次設(shè)為2000時發(fā)現(xiàn)并不能切分出來, 查看原始字典發(fā)現(xiàn)“長江大橋”頻次3858,所以在概率統(tǒng)計上遠(yuǎn)大于“江大橋”,所以將“江大橋”頻次設(shè)為1000萬。
但是實際是分不出來的,必須很極端的設(shè)為20000, 因為要保證P(江州)P(市長)P(江大橋) > P(江州)P(市)P(長江大橋)
加載用戶字典jieba.load_userdict()
jieba.load_userdict('userdict.txt')
?
2. jieba.cut參數(shù)
cut(self, sentence, cut_all=False, HMM=True) method of jieba.Tokenizer instance The main function that segments an entire sentence that contains Chinese characters into seperated words.
Parameter:
- sentence: The str(unicode) to be segmented.? ?(需要分詞的字符串)
- cut_all: Model type. True for full pattern, False for accurate pattern. (cut_all字段是分詞的全模式和普通模式/默認(rèn)模式)
- HMM: Whether to use the Hidden Markov Model. (是否使用HMM模式分詞,default True)
關(guān)于全模式和默認(rèn)模式:
str1= u“江州市長江大橋”為例:
jieba.cut(str1, cut_all=True) #全模式是將詞可能生成的詞完全切分出來
Output:
江州/ 州市/市長/長江/長江大橋/大橋? (可以理解為:所有可以切分成詞的都會顯示出來,?盡可能多得分詞)
jieba.cut(str1, cut_all=False)
Output:
江州/市/長江大橋
add_word(word, freq=None, tag=None) # 向詞典添加詞
del_word(word) # 刪除詞典中的詞
suggest_freq(segment, tune=True) # 調(diào)整詞頻率
?
其他具體使用詳見https://github.com/fxsjy/jieba
二. Thulac
安裝和使用
Thulac 是清華大學(xué)的分詞庫,也是基于HMM的分詞器
pip install thulac安裝
1 str1 = u'江州市長江大橋'
2 import thulac
3 thu = thulac.thulac()
4 word = thu.cut(str1, text=False)
5 for each in word:
6 print each[0], each[1]
?
結(jié)果如下圖,會顯示分詞結(jié)果和詞性
1 str1 = u'江州市長江大橋'
2 import thulac
3 thu = thulac.thulac()
4 word = thu.cut(str1, text=False)
對英文分詞(會將連一起的“字母和數(shù)字”切分出來, 且常規(guī)英文空格也會切分出來):
參數(shù)
以下是help(thulac.thulac)的doc介紹
class thulac
|??Methods defined here:
|??
|??__init__(self, user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False, max_length=50000, deli='_', rm_space=False)
|??????初始化函數(shù),傳入用戶設(shè)置的參數(shù),并且根據(jù)參數(shù)初始化不同
|??????模型(調(diào)入不同的.dat文件,該文件存儲了一個雙數(shù)組trie樹)
|? ? ?
user_name=None,?設(shè)置用戶詞典,用戶詞典中的詞會被打上uw標(biāo)簽。詞典中每一個詞一行,UTF8編碼?
model_path=None,?設(shè)置模型文件所在文件夾,默認(rèn)為models/
T2S=False, 是否將句子從繁體轉(zhuǎn)化為簡體
seg_only=False, False時候只進(jìn)行分詞,不進(jìn)行詞性標(biāo)注
filt=False, 是否使用過濾器去除一些沒有意義的詞語,例如“可以”。
max_length=50000,
deli='_', 默認(rèn)為‘_’, 設(shè)置詞與詞性之間的分隔符
rm_space=False, 是否去掉原文本中的空格后再進(jìn)行分詞
|? ?
|??cut(self, oiraw, text=False)?
|? ? ? text=False; 是否返回文本,不返回,則是個二維list (每一維度包含 詞+詞性);返回文本則是“分詞_詞性”組成的文本。
|??cut_f(self, input_file, output_file)
|? ? ? ?對文件分詞
|??cutline(self, oiraw)
|? ? ??
|??fast_cut(self, oiraw, text=False)
|? ? ?# fast 接口 cut-> fast_cut)
|??fast_cut_f(self, input_file, output_file)
|? ? ?# fast 接口 cut_f -> fast_cut_f
|??foo(self, x)?
|? ? ?# foo占位符,表明某個變量、函數(shù)、命令不重要,但有這個想法。
|??multiprocessing_cut_f(self, input_file, output_file, core=0)
|? ? ?#多線程對文件分詞
|??run(self)
#交互式: 屏幕input,屏幕output
詞性解釋:
具體示例詳見https://github.com/thunlp/THULAC-Python#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%8E%B0
三、snownlp
安裝、概述、示例??
pip install snownlp
snownlp 是基于3-gram的詞性標(biāo)注、HMM模型的分詞算法。?
示例:
1 from snownlp import SnowNLP
2 str1 = u'江州市長江大橋'
3 snow_obj = SnowNLP(str1)
4 snow_obj.words # list 分詞后返回一個分詞結(jié)果的list
5 for each in snow_obj:
6 print each
結(jié)果如下圖??
參數(shù)、部分方法
1 from snownlp import SnowNLP
2 str1 = u'江州市長江大橋'
3 snow_obj = SnowNLP(str1)
4 snow_obj.words # list 分詞后返回一個分詞結(jié)果的list
5 for each in snow_obj:
6 print each
7 snow_obj.tags # 一維list,內(nèi)含元組(詞,詞性)
8 snow_obj.sentiments # positive的概率
9 snow_obj.pinyin # 每個詞轉(zhuǎn)為拼音,每個詞構(gòu)成list
?
其他方法詳見https://github.com/isnowfy/snownlp?或help(SnowNLP)查看
四、yaha
安裝、簡述、示例
pip install yaha
yaha中文分詞 基于查找句子的最大概率路徑來進(jìn)行分詞
1 str1 = u'江州市長江大橋'
2 from yaha import Cuttor
3 cuttor = Cuttor() # 然后會加載字典
4 word = cuttor.cut(str1) # 生成器對象
5 for each in word:
6 print word
?
yaha分詞最大的弊端就是對英文無法在做分詞,當(dāng)遇到英文時,會將英文分為每個字母。
五、genius?
1. 安裝、簡述和示例
pip install genius
genius 是一款開源中文分詞器,其基于條件隨機(jī)場(CRF)算法的。
(這部分下次再寫)
import re
from collections import Counter
import jiebadef cut_word(datapath):with open(datapath,'r',encoding='utf-8')as fp:string = fp.read()data = re.sub(r"[\s+\.\!\/_,$%^*(【】:\]\[\-:;+\"\']+|[+——!,。?、~@#¥%……&*()]+|[0-9]+", "", string)word_list = jieba.cut(data)print(type(word_list))return word_listdef static_top_word(word_list,top=5):result = dict(Counter(word_list))print(result)sortlist = sorted(result.items(),key=lambda x:x[1],reverse=True)resultlist = []for i in range(0,top):resultlist.append(sortlist[i])return resultlistdef main():datapath = 'comment.txt'word_list = cut_word(datapath)Result = static_top_word(word_list)print(Result)
main()
總結(jié)
以上是生活随笔為你收集整理的jieba分词并做分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。