jieba源碼研讀筆記(三) - 分詞之Tokenizer初探
文章推薦指數: 80 %
jieba/__init__.py負責分詞的功能,在前篇中己經將它的架構做了簡要的介紹。
jieba/__init__.py的核心部份是Tokenizer類別,這將是本篇介紹的重點。
jieba源碼研讀筆記(三)-分詞之Tokenizer初探
keineahnung2345
于 2019-02-2109:48:48 发布
1096
收藏
分类专栏:
NLP
機器學習
jieba源碼研讀筆記
文章标签:
jieba
nlp
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/keineahnung2345/article/details/86977785
版权
NLP
同时被3个专栏收录
18篇文章
0订阅
订阅专栏
機器學習
23篇文章
0订阅
订阅专栏
jieba源碼研讀筆記
18篇文章
2订阅
订阅专栏
jieba源碼研讀筆記(三)-分詞之Tokenizer初探
前言jieba/__init__.py中的Tokenizer類別類別架構__init__函數__repr__函數get_dict_file函數gen_pfdict函數initialize函數threading.LockLock與RLock的區別tempfiletempfile.gettempdirtempfile.mkstemp
os.fdopenmarshalinitialize代碼
check_initialized函數分詞核心函數分詞函數wrapper自定義詞典
參考連結
前言
jieba/__init__.py負責分詞的功能,在前篇中己經將它的架構做了簡要的介紹。
jieba/__init__.py的核心部份是Tokenizer類別,這將是本篇介紹的重點。
jieba/init.py中的Tokenizer類別
類別架構
首先再來看一下Tokenizer類別中的所有函數名稱:
classTokenizer(object):
def__init__(self,dictionary=DEFAULT_DICT):
...
def__repr__(self):
return'
但是__init__函數是比較輕量級的,在該函數中只簡單地定義了幾個屬性。
分詞所必需的字典載入則延後至initialize函數中完成。
classTokenizer(object):
#...
def__init__(self,dictionary=DEFAULT_DICT):
self.lock=threading.RLock()
ifdictionary==DEFAULT_DICT:
self.dictionary=dictionary
else:
self.dictionary=_get_abs_path(dictionary)
self.FREQ={}
self.total=0
self.user_word_tag_tab={}
self.initialized=False
self.tmp_dir=None
self.cache_file=None
其中lock這個屬性是一個threading.RLock型別的物件,我們會在稍後的initialize函數中看到它的作用。
__repr__函數
這裡覆寫了object類別的__repr__函數。
classTokenizer(object):
#...
def__repr__(self):
return'
get_dict_file函數
這個函數的作用是讀取字典檔案,開啟後回傳。
它預設讀取dict.txt,但使用者也可以自定義字典。
classTokenizer(object):
#...
defget_dict_file(self):
ifself.dictionary==DEFAULT_DICT:
returnget_module_res(DEFAULT_DICT_NAME)
else:
returnopen(self.dictionary,'rb')
gen_pfdict函數
在initialize中會調用gen_pfdict函數:
self.FREQ,self.total=self.gen_pfdict(self.get_dict_file())
從上面這句就可以看出來,gen_pfdict的作用是從一個己開啟的字典fileobject中,獲取每個詞的出現頻率以及所有詞的出現次數總和。
以下是它的函數定義:
classTokenizer(object):
#...
defgen_pfdict(self,f):#gen_pfdict接受的參數是一個以二進制、讀取模式開啟的檔案。
lfreq={}#記錄每個詞的出現次數
ltotal=0#所有詞出現次數的總和
#他們會在函數的最後被回傳
#resolve_filename定義於_compat.py
#它的作用是獲取一個己開啟的檔案的名字
f_name=resolve_filename(f)
forlineno,lineinenumerate(f,1):#逐行讀取檔案f的內容
try:
#因為是以二進制的方式讀檔,
#所以這裡用decode來將它由bytes型別轉成字串型別
line=line.strip().decode('utf-8')
#更新lfreq及ltotal
word,freq=line.split('')[:2]
freq=int(freq)
lfreq[word]=freq
ltotal+=freq
#把word的前ch+1個字母當成一個出現次數為0的單詞,加入lfreq這個字典中
#我們待會可以在get_DAG函數裡看到這樣做的用意
#這裡的xragne在Python3也會被認識,這是因為在_compat.py中定義了xrange
#,並將它指向Python3裡的range函數
forchinxrange(len(word)):
wfrag=word[:ch+1]
ifwfragnotinlfreq:
lfreq[wfrag]=0
#在使用.decode('utf-8')的過程中有可能拋出UnicodeDecodeError錯誤。
#而我們可以由inspect.getmro(UnicodeDecodeError)這個函數來得知:
#ValueError是UnicodeDecodeError的parentclass。
#所以可以接住UnicodeDecodeError這個異常
exceptValueError:
raiseValueError(
'invaliddictionaryentryin%satLine%s:%s'%(f_name,lineno,line))
#記得參數f是一個己開啟的檔案
#這裡將這個檔案給關閉
f.close()
returnlfreq,ltotal
initialize函數
initialize函數的功能是載入字典,雖然與__init__函數一樣都是用於初始化。
但是它不像__init__是在物件創造時就被執行,而是在使用者要存取字典或是開始進行分詞的時候才會執行。
initialize函數會調用前面介紹的get_dict_file,gen_pfdict,_get_abs_path,DICT_WRITING,default_logger等函數及變數。
在initialize函數的定義中,使用到了tempfile,marshal套件以及threading中的RLock類別。
我們先來看看他們各自的功能:
threading.Lock
當我們希望某一段代碼能完整地被執行而不被打斷時,我們可以使用threading.Lock來達成。
它的使用方法可以參考MULTITHREADING:USINGLOCKSINTHEWITHSTATEMENT(CONTEXTMANAGER):方法一:
withsome_lock:
#dosomething...
方法二:
some_lock.acquire()
try:
#dosomething...
finally:
some_lock.release()
Lock與RLock的區別
但是initialize裡使用的是threading.RLock而非threading.Lock,兩者之間的區別可以參考:classthreading.RLock及WhatisthedifferencebetweenLockandRLock。
在上述連結的例子中,函數a跟函數b都需要lock,並且函數a會呼叫函數b。
如果這時候使用threading.Lock將會導致程序卡死,因此我們必須使用threading.RLock。
RLock的特性是可以重複地被獲取,參考以下例子:首先測試threading.Lock:
importtime
importthreading
lock=threading.Lock()
withlock:
withlock:
time.sleep(1)
如果真的去運行上面那段代碼,會發現它的執行時間遠遠超過一秒。
這是因為第二個withlock:無法成功地獲取lock,因而導致程序卡死。
再來測試threading.RLock:
importtime
importthreading
lock=threading.RLock()
withlock:
withlock:
time.sleep(1)
這段代碼便可以在1秒左右結束。
因為threading.RLock就是為了這種場景而設計的。
tempfile
tempfile.gettempdir
tempfile.gettempdir官方文檔:
Returnthenameofthedirectoryusedfortemporaryfiles.Thisdefinesthedefaultvalueforthedirargumenttoallfunctionsinthismodule.Pythonsearchesastandardlistofdirectoriestofindonewhichthecallingusercancreatefilesin.
importtempfile
tempfile.gettempdir()
#'/var/folders/gp/cf5j4s914r73_4bxc4cnksg80000gn/T'#onMac
#'C:\\Users\\user\\AppData\\Local\\Temp'#onWindows
tempfile.gettempdir的作用旨在尋找一個可以寫入暫存檔的目錄。
tempfile.mkstemp
tempfile.mkstemp文檔:
tempfile.mkstemp([suffix=’’[,prefix=‘tmp’[,dir=None[,text=False]]]]):Createsatemporaryfileinthemostsecuremannerpossible.Ifdirisspecified,thefilewillbecreatedinthatdirectory.mkstemp()returnsatuplecontaininganOS-levelhandletoanopenfile(aswouldbereturnedbyos.open())andtheabsolutepathnameofthatfile,inthatorder.
tempfile.mkstemp的作用旨在使用最安全的方式創建一個暫存檔。
它回傳的是一個filedescriptor,以及該檔案的絕對路徑。
os.fdopen
os.fdopen文檔:
Returnanopenfileobjectconnectedtothefiledescriptorfd.
利用傳入的filedescriptorfd,回傳一個開啟的檔案物件。
marshal
參考SerializingDataUsingthemarshalModule:marshal.dump及marshal.load是用來儲存及載入Python物件的工具。
initialize代碼
DICT_WRITING={}
classTokenizer(object):
#...
definitialize(self,dictionary=None):
#abs_path代表的是字典的絕對路徑
#如果使用者傳入了dictionary參數,則需要更新abs_path
#否則的話,就直接使用在__init__()中己經設好的self.dictionary
ifdictionary:
abs_path=_get_abs_path(dictionary)
ifself.dictionary==abs_pathandself.initialized:
#因為詞典己載入,所以返回
return
else:
self.dictionary=abs_path
self.initialized=False
else:
abs_path=self.dictionary
#載入詞典的過程必須被完整執行,所以使用lock
withself.lock:
#這一段try-except的內容都是pass,似乎沒有作用
try:
withDICT_WRITING[abs_path]:
pass
exceptKeyError:
pass
#如果self.intialized為True,代表字典己載入
#這時就直接返回
ifself.initialized:
return
default_logger.debug("Buildingprefixdictfrom%s..."%(abs_pathor'thedefaultdictionary'))
t1=time.time()
#將cache_file設定快取檔案的名稱
ifself.cache_file:
cache_file=self.cache_file
#defaultdictionary
elifabs_path==DEFAULT_DICT:
cache_file="jieba.cache"
#customdictionary
else:
cache_file="jieba.u%s.cache"%md5(
abs_path.encode('utf-8','replace')).hexdigest()
#將cache_file更新為其絕對路徑
cache_file=os.path.join(
self.tmp_dirortempfile.gettempdir(),cache_file)
#快取檔案的目錄
#preventabsolutepathinself.cache_file
tmpdir=os.path.dirname(cache_file)
load_from_cache_fail=True
#載入cache_file
#首先檢查cache_file是否存在,並且是一個檔案
#如果不是的話則略過這部份;
#如果是的話則接著確認如果使用的是預設的字典DEFAULT_DICT
#如果不是使用預設的字典,則要確認cache_file的修改時間晚於自訂義字典的修改時間
#如果都符合條件,則從快取檔案中載入self.FREQ,self.total這兩個值,
#並將load_from_cache_fail設為False
ifos.path.isfile(cache_file)and(abs_path==DEFAULT_DICTor
#os.path.getmtime:獲取檔案的最後修改時間
os.path.getmtime(cache_file)>os.path.getmtime(abs_path)):
default_logger.debug(
"Loadingmodelfromcache%s"%cache_file)
try:
withopen(cache_file,'rb')ascf:
#底下有marshal的介紹
self.FREQ,self.total=marshal.load(cf)
load_from_cache_fail=False
exceptException:
load_from_cache_fail=True
#如果cache_file載入失敗,就重新讀取字典檔案,
#獲取self.FREQ,self.total然後生成快取檔案
ifload_from_cache_fail:
#可能是怕程式中斷,所以先把lock存到DICT_WRITING這個字典裡
#中斷後繼續執行時就可以不用再重新生成一個lock
wlock=DICT_WRITING.get(abs_path,threading.RLock())
DICT_WRITING[abs_path]=wlock
#在這個程式區塊中,又需要一個lock,用來鎖住寫檔的這一區塊
withwlock:
self.FREQ,self.total=self.gen_pfdict(self.get_dict_file())
default_logger.debug(
"Dumpingmodeltofilecache%s"%cache_file)
try:
#tmpdir是剛剛決定好的快取檔案的路徑
#preventmovingacrossdifferentfilesystems
fd,fpath=tempfile.mkstemp(dir=tmpdir)
#使用marshal.dump將剛拿到的
#(self.FREQ,self.total)倒入temp_cache_file
withos.fdopen(fd,'wb')astemp_cache_file:
marshal.dump(
(self.FREQ,self.total),temp_cache_file)
#把檔案重命名為cache_file
_replace_file(fpath,cache_file)
exceptException:
default_logger.exception("Dumpcachefilefailed.")
try:
delDICT_WRITING[abs_path]
exceptKeyError:
pass
#之後會利用self.initialized這個屬性
#來檢查self.FREQ,self.total是否己被設為有意義的值
self.initialized=True
default_logger.debug(
"Loadingmodelcost%.3fseconds."%(time.time()-t1))
default_logger.debug("Prefixdicthasbeenbuiltsuccessfully.")
在initialize結束後,self.FREQ才會被賦予有意義的值,而self.FREQ在分詞的時候會被用到。
check_initialized函數
檢查self.FREQ及self.total是否己被設為有意義的值。
如果還沒,則調用initialize函數從字典導入。
classTokenizer(object):
#...
defcheck_initialized(self):
ifnotself.initialized:
self.initialize()
分詞核心函數
這裡定義的幾個函數實現了Tokenizer的核心功能,在後續的章節裡將會一一介紹。
classTokenizer(object):
#...
defcalc(self,sentence,DAG,route):
...
defget_DAG(self,sentence):
...
def__cut_all(self,sentence):
...
def__cut_DAG_NO_HMM(self,sentence):
...
def__cut_DAG(self,sentence):
...
defcut(self,sentence,cut_all=False,HMM=True):
...
defcut_for_search(self,sentence,HMM=True):
...
分詞函數wrapper
這裡定義了分詞函數的wrapper。
原有的分詞函數回傳的是generator型別的變數。
下面以l開頭的函數們調用了原有的分詞函數,將它們的回傳值轉為list型別,提升了其易用性。
classTokenizer(object):
#...
deflcut(self,*args,**kwargs):
returnlist(self.cut(*args,**kwargs))
deflcut_for_search(self,*args,**kwargs):
returnlist(self.cut_for_search(*args,**kwargs))
_lcut=lcut
_lcut_for_search=lcut_for_search
def_lcut_no_hmm(self,sentence):
returnself.lcut(sentence,False,False)
def_lcut_all(self,sentence):
returnself.lcut(sentence,True)
def_lcut_for_search_no_hmm(self,sentence):
returnself.lcut_for_search(sentence,False)
deftokenize(self,unicode_sentence,mode="default",HMM=True):
...
另外tokenize函數則是將cut函數回傳的字串包裝成(字串起始位置,字串終止位置,字串)的三元組後回傳。
自定義詞典
jieba支持自定義詞典,因為這不是核心功能,在此僅列出相關函數,並不多做介紹。
classTokenizer(object):
#...
defload_userdict(self,f):
'''
Loadpersonalizeddicttoimprovedetectrate.
Parameter:
-f:Aplaintextfilecontainswordsandtheirocurrences.
Canbeafile-likeobject,orthepathofthedictionaryfile,
whoseencodingmustbeutf-8.
Structureofdictfile:
word1freq1word_type1
word2freq2word_type2
...
Wordtypemaybeignored
'''
self.check_initialized()
ifisinstance(f,string_types):
f_name=f
f=open(f,'rb')
else:
f_name=resolve_filename(f)
forlineno,lninenumerate(f,1):
line=ln.strip()
ifnotisinstance(line,text_type):
try:
line=line.decode('utf-8').lstrip('\ufeff')
exceptUnicodeDecodeError:
raiseValueError('dictionaryfile%smustbeutf-8'%f_name)
ifnotline:
continue
#matchwon'tbeNonebecausethere'satleastonecharacter
word,freq,tag=re_userdict.match(line).groups()
iffreqisnotNone:
freq=freq.strip()
iftagisnotNone:
tag=tag.strip()
self.add_word(word,freq,tag)
defadd_word(self,word,freq=None,tag=None):
"""
Addawordtodictionary.
freqandtagcanbeomitted,freqdefaultstobeacalculatedvalue
thatensuresthewordcanbecutout.
"""
self.check_initialized()
word=strdecode(word)
freq=int(freq)iffreqisnotNoneelseself.suggest_freq(word,False)
self.FREQ[word]=freq
self.total+=freq
iftag:
self.user_word_tag_tab[word]=tag
forchinxrange(len(word)):
wfrag=word[:ch+1]
ifwfragnotinself.FREQ:
self.FREQ[wfrag]=0
iffreq==0:
finalseg.add_force_split(word)
defdel_word(self,word):
"""
Convenientfunctionfordeletingaword.
"""
self.add_word(word,0)
defsuggest_freq(self,segment,tune=False):
"""
Suggestwordfrequencytoforcethecharactersinawordtobe
joinedorsplitted.
Parameter:
-segment:Thesegmentsthatthewordisexpectedtobecutinto,
Ifthewordshouldbetreatedasawhole,useastr.
-tune:IfTrue,tunethewordfrequency.
NotethatHMMmayaffectthefinalresult.Iftheresultdoesn'tchange,
setHMM=False.
"""
self.check_initialized()
ftotal=float(self.total)
freq=1
ifisinstance(segment,string_types):
word=segment
forseginself.cut(word,HMM=False):
freq*=self.FREQ.get(seg,1)/ftotal
freq=max(int(freq*self.total)+1,self.FREQ.get(word,1))
else:
segment=tuple(map(strdecode,segment))
word=''.join(segment)
forseginsegment:
freq*=self.FREQ.get(seg,1)/ftotal
freq=min(int(freq*self.total),self.FREQ.get(word,0))
iftune:
add_word(word,freq)
returnfreq
defset_dictionary(self,dictionary_path):
withself.lock:
abs_path=_get_abs_path(dictionary_path)
ifnotos.path.isfile(abs_path):
raiseException("jieba:filedoesnotexist:"+abs_path)
self.dictionary=abs_path
self.initialized=False
參考連結
Idon’tunderstandos.name==‘nt’:.whatisntandos.nameWhatisthedifferencebetweenLockandRLockMULTITHREADING:USINGLOCKSINTHEWITHSTATEMENT(CONTEXTMANAGER)tempfile—GeneratetemporaryfilesanddirectoriesSerializingDataUsingthemarshalModule
keineahnung2345
关注
关注
0
点赞
踩
0
评论
0
收藏
打赏
扫一扫,分享内容
点击复制链接
专栏目录
Python中运行有关jieba模块的时候报错:Buildingprefixdictfromthedefaultdictionary…
12-21
人生处处是惊喜,指不定哪一刻出现了莫名其妙的事件……好了,抒情式开头结束,下面进入正文
前几天运行的好好的程序,今天崩了???
问题出在我的电脑上【狗头.jpg】,它卡了一下,我就无意点了哪,它所有程序报错,我就重启pycharm,然后我别的程序没问题了,有关jieba的程序仍旧报错????
我盯着程序看了会儿,没找出问题;我接着去百度,似乎没有人出现此类错误;然后,我写了最简单的分词的代码看是不是jieba自己出现问题:
importjieba
seg_list=jieba.cut("我是共产主义接班人",cut_all=True)
print("【全模式】:"+"/".jo
jieba源碼研讀筆記(八)-分詞函數入口cut及tokenizer函數
keineahnung2345的博客
03-01
351
根據jieba文檔,jieba的分詞共包含三種模式,分別是:全模式、精確模式及搜索引擎模式。
其中的精確模式又分為不使用HMM兩種模式或使用HMM(在jieba中為默認模式)兩種。
所以分詞總共有四種模式可以使用。
在前三篇文章:全模式,精確模式(使用動態規劃),精確模式(使用HMM維特比算法發現新詞)當中,己經看到了前三種模式,它們分別對應到:__cut_all,__cut_DAG_NO_HMM及__cut_DAG函數。
本篇介紹的cut函數將作為上述分詞函數的入口,依據傳入參數的不同,來選擇要調用哪一個函數。
参与评论
您还未登录,请先
登录
后发表或查看评论
jieba源碼研讀筆記(一)-分詞功能初探
keineahnung2345的博客
02-20
460
jieba的分詞功能是由jieba這個模組本身及finalseg來完成。
而jieba這個模組裡包含了__init__.py,__main__.py,_compat.py及dict.txt四個檔案。
其中__init__.py定義了Tokenizer類別及一些全局函數,用於分詞本身。
__main__.py定義了jieba在命令行裡的使用方式。
_compat.py用於處理Python2/3相容性的問題。
dict.txt則是字典,記錄了各詞的詞頻及詞性。
Python运行jieba出现Buildingprefixdictfromthedefaultdictionary...解决办法(会显示正确结果)
热门推荐
gurentan1911的博客
01-18
1万+
Python运行jieba出现
Buildingprefixdictfromthedefaultdictionary…解决办法
这是我运行了代码出现的错误,但是我的结果还是可以正常显示的
Buildingprefixdictfromthedefaultdictionary...
LoadingmodelfromcacheC:\Users\95114\AppData\Local\Temp\jieba.cache
Loadingmodelcost0.842second
tokenizer.encode()
不知道起什么名字
08-17
1716
tokenizer.encode("说你跑的挺远",add_special_tokenizerns=False)
相当于
seg=tokenizer.tokenize("说你跑的挺远")
encoder=tokenizer.convert_tokenizerns_to_ids(seg)
Transformers包tokenizer.encode()方法源码阅读笔记
天才小呵呵的博客
04-10
1万+
1引言
HuggingFace公司出的transformer包,能够超级方便的引入预训练模型,BERT、ALBERT、GPT2…
tokenizer=BertTokenizer.from_pretrained('bert-base-uncased')
model=BertForTokenClassification.from_pretrained('bert-bas...
python句子中没有中文_Python中jieba中文分词库的使用
weixin_32536777的博客
12-31
311
jieba是python的一个中文分词库,下面介绍它的使用方法。
安装方式1:
pipinstalljieba
方式2:
先下载http://pypi.python.org/pypi/jieba/
然后解压,运行pythonsetup.pyinstall功能下面介绍下jieba的主要功能,具体信息可参考github文档:https://github.com/fxsjy/jieba分词j...
第一章中文语言的机器处理
qq_34028001的博客
04-10
2651
1.搭建NLTK环境
1.操作系统:win10x64
2.Python开发环境:Python-3.7
3.安装常用Python应用程序
安装数学运算包。
pipinstallnumpy
condainstallscipy
安装mysql数据库工具包。
安装Tornado网络包 。
安装NLTK开发环境。
(1)安装NLTK语言开发系统。
pipinst...
jieba的Tokenizer分词器
Claire_Mk的博客
12-16
401
2021SC@SDUSC
一、gen_pfdict函数
在初始化的过程中,会构建前缀词典。
构建前缀词典的入口函数是gen_pfdict(self,f),解析离线统计词典文本文件,每一行分别对应着词、词频、词性,将词和词频提取出来,以词为key,以词频为value,加入到前缀词典中。
对于每个词,再分别获取它的前缀词,如果前缀词已经存在于前缀词典中,则不处理;如果该前缀词不在前缀词典中,则将其词频置为0,便于后续构建有向无环图。
defgen_pfdict(f):
lfreq={}
jieba库:Tokenizer()类详解(一)初始化
最新发布
qq_51945755的博客
12-27
269
2021SC@SDUSC
jieba中文分词源码分析(三)
Daniel的技术笔记不积跬步无以至千里,不积小流无以成江海。
09-05
1万+
一、前缀字典作者这个版本(0.37)中使用前缀字典实现了词库的存储(即dict.txt文件中的内容),而弃用之前版本的trie树存储词库,python中实现的trie树是基于dict类型的数据结构而且dict中又嵌套dict类型,这样嵌套很深,导致内存耗费严重,具体点这里,下面是@gumblexcommit的内容:
对于get_DAG()函数来说,用Trie数据结构,特别是在Python环
Rasa分词之JiebaTokenizer
发呆的比目鱼的博客
11-28
447
Rasa分词之JiebaTokenizer
rasa/nlu/tokenizers/tokenizer.py
Token分词结果返回的对象
Tokenizer分词的父类,其中train函数是训练,process是预测。
这里的token分为两种attribute和text,
分好的token对象保存在training_examples的message中
classToken:
def__init__(
self,
text:Text,
s
HuggingFaceBERTtokenizer.encode笔记
weixin_42899049的博客
10-22
645
鉴于之前确实没有好好阅读官方文档和论文,对于berttokenizer的截断和填充是用列表进行操作,且是直接补0。
其实tokenizer.encode有填补和截断的操作
目录
encoder参数
import
encoder参数
encode(text:Union[str,List[str],List[int]],
text_pair:Union[str,List[str],List[int],NoneType]=None,
add_special_tokens:b.
jieba库:Tokenizer()类详解:(四)加载用户自定义词典
qq_51945755的博客
11-09
417
2021SC@SDUSC
源码:
defload_userdict(self,f):
'''
Loadpersonalizeddicttoimprovedetectrate.
Parameter:
-f:Aplaintextfilecontainswordsandtheirocurrences.
Canbeafile-likeobject,or
求大佬指点,写的是三国演义中文文本的词频统计,可是总是报错(已解决)
take_cola的博客
03-03
1230
1.首先是这样写的:
importjieba
txt=open("D:/python程序/threekingdoms.txt","rt",encoding='utf-8').read()
words=jieba.lcut(txt)
counts={}
forwordinwords:
iflen(word)==1:
continue
else:
coun...
JiebaTokenizer文档
发呆的比目鱼的博客
11-29
84
JiebaTokenizer文档
tokenizer.encode()与tokenizer.tokenize()对比,言简意赅转高人讲学
studyvcmfc的专栏
10-19
546
tokenizer.encode()_不知道起什么名字-CSDN博客_tokenizer.encode
tokenizer.encode("说你跑的挺远",add_special_tokenizerns=False)
相当于
seg=tokenizer.tokenize("说你跑的挺远")
encoder=tokenizer.convert_tokenizerns_to_ids(seg)
https://blog.csdn.net/Princeicon/article/details/108.
jieba源碼研讀筆記(十一)-詞性標注之POSTokenizer初探
keineahnung2345的博客
03-01
629
前篇看了posseg/__init__.py檔的大架構,這裡將繼續介紹檔案中的POSTokenizer這個類別。
本篇僅介紹POSTokenizer類別初始化及載入字典的部份,核心函數及其wrapper將會在後續的文章裡介紹。
jieba库:POSTokenizer类cut()方法详解
qq_51945755的博客
11-09
292
2021SC@SDUSC
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022CSDN
皮肤主题:像素格子
设计师:CSDN官方博客
返回首页
keineahnung2345
CSDN认证博客专家
CSDN认证企业博客
码龄4年
暂无认证
233
原创
8万+
周排名
2万+
总排名
27万+
访问
等级
4403
积分
55
粉丝
94
获赞
66
评论
209
收藏
私信
关注
热门文章
docker-composeup:ERROR:Encounterederrorswhilebringinguptheproject.錯誤及解決方式
38195
Errorresponsefromdaemon:Dockerfileparseerrorlinexxx:unknowninstruction:xxx
33764
PIL及matplotlib:OSError:cannotidentifyimagefile錯誤及解決方式
15153
CannotconnecttotheDockerdaemonatunix:///var/run/docker.sock.Isthedockerdaemonrunning?錯誤
10506
Ubuntu下安裝Python版OpenCV
7305
分类专栏
Redmine
8篇
三維點雲
50篇
線性代數
12篇
三維重建
5篇
TensorRT源碼研讀筆記
22篇
jieba源碼研讀筆記
18篇
matterport/Mask_RCNN代碼研讀筆記
2篇
CV
8篇
深度學習
13篇
Linux
45篇
Tensorflow踩坑實錄
5篇
Python學習筆記
13篇
macOS
4篇
機器學習
23篇
docker
18篇
Spark
9篇
大數據
9篇
ftp
2篇
Stackoverflow
1篇
NLP
18篇
Darknet
Windows
2篇
PyTorch
1篇
C++
50篇
C語言
13篇
最新评论
KITTIdepthcompletion數據集評測
nk北夏:
老哥请问一下,深度估计用的GT是经过处理的还是lidardepth?
Errorresponsefromdaemon:Dockerfileparseerrorlinexxx:unknowninstruction:xxx
喵先生丶:
台湾的吧
PCL-MLS代碼研讀(十四)-DISTINCT_CLOUD上採樣方法
keineahnung2345:
我把代碼放在https://gist.github.com/keineahnung2345/f3f323e4c643770036fcdf59a648e007,可以參考看看
PCL-MLS代碼研讀(十四)-DISTINCT_CLOUD上採樣方法
Dawdler416:
请问博主,您使用的曲面模型是怎么生成的啊,可以指点一下吗
PCLMLS論文ComputingandRenderingPointSetSurfaces研讀筆記
keineahnung2345:
太謝謝你了,我原文分成一到三步確實有點問題
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
redmine插件安裝及卸載
Generalized-ICP(GICP)論文研讀
兩獨立高斯隨機變數之和
2022年7篇
2021年76篇
2020年79篇
2019年27篇
2018年47篇
目录
目录
分类专栏
Redmine
8篇
三維點雲
50篇
線性代數
12篇
三維重建
5篇
TensorRT源碼研讀筆記
22篇
jieba源碼研讀筆記
18篇
matterport/Mask_RCNN代碼研讀筆記
2篇
CV
8篇
深度學習
13篇
Linux
45篇
Tensorflow踩坑實錄
5篇
Python學習筆記
13篇
macOS
4篇
機器學習
23篇
docker
18篇
Spark
9篇
大數據
9篇
ftp
2篇
Stackoverflow
1篇
NLP
18篇
Darknet
Windows
2篇
PyTorch
1篇
C++
50篇
C語言
13篇
目录
打赏作者
keineahnung2345
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:--)
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1中文分词原理理解+jieba分词详解(二) - 知乎专栏
result = jieba.tokenize(u'永和服装饰品有限公司'). for tk in result: ... Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词...
- 2Python 结巴分词(jieba)Tokenize和ChineseAnalyzer的使用及 ...
本文主要介绍Python中,使用结巴分词(jieba)中的Tokenize方法,并返回分词的词语在原文的起止位置,和ChineseAnalyzer的使用,以及相关的示例代码。
- 3jieba——分詞、添加詞典、詞性標註、Tokenize - 台部落
jieba——分詞、添加詞典、詞性標註、Tokenize 1.分詞jieba.cut 方法接受三個輸入參數: 需要分詞的字符串;cut_all 參數用來控制是否採用全模式;HMM ...
- 4Python Examples of jieba.tokenize - ProgramCreek.com
Python jieba.tokenize() Examples. The following are 30 code examples for showing how to use jieba...
- 5fxsjy/jieba: 结巴中文分词
Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。 jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。 代码示例.