當前位置:首頁 » 編程語言 » 分詞演算法python

分詞演算法python

發布時間: 2023-09-05 22:05:26

python中怎樣處理漢語的同義詞用結巴分詞

python中文分詞:結巴分詞
中文分詞是中文文本處理的一個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點:
基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)
採用了動態規劃查找最大概率路徑, 找出基於詞頻的最大切分組合
對於未登錄詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法
安裝(Linux環境)
下載工具包,解壓後進入目錄下,運行:python setup.py install

模式
默認模式,試圖將句子最精確地切開,適合文本分析
全模式,把句子中所有的可以成詞的詞語都掃描出來,適合搜索引擎

介面
組件只提供jieba.cut 方法用於分詞
cut方法接受兩個輸入參數:
第一個參數為需要分詞的字元串
cut_all參數用來控制分詞模式
待分詞的字元串可以是gbk字元串、utf-8字元串或者unicode
jieba.cut返回的結構是一個可迭代的generator,可以使用for循環來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉化為list

實例

#! -*- coding:utf-8 -*-
import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all = True)
print "Full Mode:", ' '.join(seg_list)

seg_list = jieba.cut("我來到北京清華大學")
print "Default Mode:", ' '.join(seg_list)

㈡ 如何對excel表格里的詞結巴分詞python

#-*-coding:utf-8-*-
importjieba
'''''
Createdon2015-11-23
'''

defword_split(text):
"""
Splitatextinwords.
(word,location).
"""
word_list=[]
windex=0
word_primitive=jieba.cut(text,cut_all=True)
forwordinword_primitive:
iflen(word)>0:
word_list.append((windex,word))
windex+=1
returnword_list

definverted_index(text):
"""
CreateanInverted-.
{word:[locations]}
"""
inverted={}
forindex,wordinword_split(text):
locations=inverted.setdefault(word,[])
locations.append(index)
returninverted


definverted_index_add(inverted,doc_id,doc_index):
"""
AddInvertd-Indexdoc_indexofthedocumentdoc_idtothe
Multi-DocumentInverted-Index(inverted),
usingdoc_idasdocumentidentifier.
{word:{doc_id:[locations]}}
"""
forword,locationsindoc_index.iteritems():
indices=inverted.setdefault(word,{})
indices[doc_id]=locations
returninverted

defsearch_a_word(inverted,word):
"""
searchoneword
"""
word=word.decode('utf-8')
ifwordnotininverted:
returnNone
else:
word_index=inverted[word]
returnword_index

defsearch_words(inverted,wordList):
"""
searchmorethanoneword
"""
wordDic=[]
docRight=[]
forwordinwordList:
ifisinstance(word,str):
word=word.decode('utf-8')
ifwordnotininverted:
returnNone
else:
element=inverted[word].keys()
element.sort()
wordDic.append(element)
numbers=len(wordDic)
inerIndex=[0foriinrange(numbers)]
docIndex=[wordDic[i][0]foriinrange(numbers)]
flag=True
whileflag:
ifmin(docIndex)==max(docIndex):
docRight.append(min(docIndex))
inerIndex=[inerIndex[i]+1foriinrange(numbers)]
foriinrange(numbers):
ifinerIndex[i]>=len(wordDic[i]):
flag=False
returndocRight
docIndex=[wordDic[i][inerIndex[i]]foriinrange(numbers)]
else:
minIndex=min(docIndex)
minPosition=docIndex.index(minIndex)
inerIndex[minPosition]+=1
ifinerIndex[minPosition]>=len(wordDic[minPosition]):
flag=False
returndocRight
docIndex=[wordDic[i][inerIndex[i]]foriinrange(numbers)]

defsearch_phrase(inverted,phrase):
"""
searchphrase
"""
docRight={}
temp=word_split(phrase)
wordList=[temp[i][1]foriinrange(len(temp))]
docPossible=search_words(inverted,wordList)
fordocindocPossible:
wordIndex=[]
indexRight=[]
forwordinwordList:
wordIndex.append(inverted[word][doc])
numbers=len(wordList)
inerIndex=[0foriinrange(numbers)]
words=[wordIndex[i][0]foriinrange(numbers)]
flag=True
whileflag:
ifwords[-1]-words[0]==numbers-1:
indexRight.append(words[0])
inerIndex=[inerIndex[i]+1foriinrange(numbers)]
foriinrange(numbers):
ifinerIndex[i]>=len(wordIndex[i]):
flag=False
docRight[doc]=indexRight
break
ifflag:
words=[wordIndex[i][inerIndex[i]]foriinrange(numbers)]
else:
minIndex=min(words)
minPosition=words.index(minIndex)
inerIndex[minPosition]+=1
ifinerIndex[minPosition]>=len(wordIndex[minPosition]):
flag=False
break
ifflag:
words=[wordIndex[i][inerIndex[i]]foriinrange(numbers)]
returndocRight


if__name__=='__main__':
doc1="""
中文分詞指的是將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規范
重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文
只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符,雖然英文也同樣
存在短語的劃分問題,不過在詞這一層上,中文比之英文要復雜的多、困難的多。
"""

doc2="""
存在中文分詞技術,是由於中文在基本文法上有其特殊性,具體表現在:
與英文為代表的拉丁語系語言相比,英文以空格作為天然的分隔符,而中文由於繼承自古代漢語的傳統,
詞語之間沒有分隔。古代漢語中除了連綿詞和人名地名等,詞通常就是單個漢字,所以當時沒有分詞
書寫的必要。而現代漢語中雙字或多字詞居多,一個字不再等同於一個詞。
在中文裡,「詞」和「片語」邊界模糊
現代漢語的基本表達單元雖然為「詞」,且以雙字或者多字詞居多,但由於人們認識水平的不同,對詞和
短語的邊界很難去區分。
例如:「對隨地吐痰者給予處罰」,「隨地吐痰者」本身是一個詞還是一個短語,不同的人會有不同的標准,
同樣的「海上」「酒廠」等等,即使是同一個人也可能做出不同判斷,如果漢語真的要分詞書寫,必然會出現
混亂,難度很大。
中文分詞的方法其實不局限於中文應用,也被應用到英文處理,如手寫識別,單詞之間的空格就不很清楚,
中文分詞方法可以幫助判別英文單詞的邊界。
"""

doc3="""
作用
中文分詞是文本挖掘的基礎,對於輸入的一段中文,成功的進行中文分詞,可以達到電腦自動識別語句含義的效果。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,
但如何讓計算機也能理解?其處理過程就是分詞演算法。
影響
中文分詞對於搜索引擎來說,最重要的並不是找到所有結果,因為在上百億的網頁中找到所有結果沒有太多的意義,
沒有人能看得完,最重要的是把最相關的結果排在最前面,這也稱為相關度排序。中文分詞的准確與否,常常直接
影響到對搜索結果的相關度排序。從定性分析來說,搜索引擎的分詞演算法不同,詞庫的不同都會影響頁面的返回結果
"""

doc4="""
這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,
若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向
匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;常用的幾種
機械分詞方法如下:
正向最大匹配法(由左到右的方向);
逆向最大匹配法(由右到左的方向);
最少切分(使每一句中切出的詞數最小);
雙向最大匹配法(進行由左到右、由右到左兩次掃描)
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。
由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於
正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為,單純使用逆向
最大匹配的錯誤率為。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞
作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。
一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵
的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法
是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞
結果進行檢驗、調整,從而極大地提高切分的准確率。
對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。
"""

doc5="""
從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。
因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度
進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字的相鄰共現概率。互現信息體現了
漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法
只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法
也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、
「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本
的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,
既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
另外一類是基於統計機器學習的方法。首先給出大量已經分詞的文本,利用統計機器學習模型學習詞語切分的規律
(稱為訓練),從而實現對未知文本的切分。我們知道,漢語中各個字單獨作詞語的能力是不同的,此外有的字常
常作為前綴出現,有的字卻常常作為後綴(「者」「性」),結合兩個字相臨時是否成詞的信息,這樣就得到了許多
與分詞有關的知識。這種方法就是充分利用漢語組詞的規律來分詞。這種方法的最大缺點是需要有大量預先分好詞
的語料作支撐,而且訓練過程中時空開銷極大。
到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法
來實現,都需要綜合不同的演算法。例如,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,就是像中西醫結合
般綜合運用機械方法和知識方法。對於成熟的中文分詞系統,需要多種演算法綜合處理問題。
"""

#BuildInverted-Indexfordocuments
inverted={}
documents={'doc1':doc1,'doc2':doc2,'doc3':doc3,'doc4':doc4,'doc5':doc5}
fordoc_id,textindocuments.iteritems():
doc_index=inverted_index(text)
inverted_index_add(inverted,doc_id,doc_index)

#Searchoneword
aWord="分詞"
result_a_word=search_a_word(inverted,aWord)
ifresult_a_word:
result_a_word_docs=result_a_word.keys()
print"'%s'isappearedat"%(aWord)
forresult_a_word_docinresult_a_word_docs:
result_a_word_index=result_a_word[result_a_word_doc]
forindexinresult_a_word_index:
print(str(index)+''),
print"of"+result_a_word_doc
print""
else:
print"Nomatches! "

#Searchmorethanoneword
words=["漢語","切分"]
result_words=search_words(inverted,words)
ifresult_words:
print("["),
foriinrange(len(words)):
print("%s"%(words[i])),
print("]areappearedatthe"),
forresult_words_docinresult_words:
print(result_words_doc+''),
print" "
else:
print"Nomatches! "

#Searchphrase
phrase="中文分詞"
result_phrase=search_phrase(inverted,phrase)
ifresult_phrase:
result_phrase_docs=result_phrase.keys()
print"'%s'isappearedatthe"%(phrase)
forresult_phrase_docinresult_phrase_docs:
result_phrase_index=result_phrase[result_phrase_doc]
forindexinresult_phrase_index:
print(str(index)+''),
print"of"+result_phrase_doc
print""
else:
print"Nomatches! "

㈢ 用python怎麼能夠將一句中文分割為單個的字

字元串可以直接分片或者索引訪問,比如s[0]=我,s[-1]=做。等等。
如果是要轉成list,可以直接構造,如: l=list('abc')或者l=list(s)
分詞需要相應的演算法和詞典支持。pymmseg-cpp是一個不錯的python中文分詞庫。你可以試試。
https://github.com/pluskid/pymmseg-cpp/

㈣ Python中,已經得到一個包含所有單詞的詞典,如何統計詞典中的單詞在每一句話中出現的次數

眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。

現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。

1、基於字元串匹配的分詞方法

這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的幾種機械分詞方法如下:

1)正向最大匹配法(由左到右的方向);

2)逆向最大匹配法(由右到左的方向);

3)最少切分(使每一句中切出的詞數最小)。

還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。

一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。

對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。

2、基於理解的分詞方法

這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。

3、基於統計的分詞方法

從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,相當於用中葯中的復方概念,即用不同的葯才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。

㈤ Python中文分詞的原理你知道嗎

中文分詞,即 Chinese Word Segmentation,即將一個漢字序列進行切分,得到一個個單獨的詞。表面上看,分詞其實就是那麼回事,但分詞效果好不好對信息檢索、實驗結果還是有很大影響的,同時分詞的背後其實是涉及各種各樣的演算法的。

中文分詞與英文分詞有很大的不同,對英文而言,一個單詞就是一個詞,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區分標記,需要人為切分。根據其特點,可以把分詞演算法分為四大類:

基於規則的分詞方法

基於統計的分詞方法

基於語義的分詞方法

基於理解的分詞方法

下面我們對這幾種方法分別進行總結。

基於規則的分詞方法

這種方法又叫作機械分詞方法、基於字典的分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行匹配。若在詞典中找到某個字元串,則匹配成功。該方法有三個要素,即分詞詞典、文本掃描順序和匹配原則。文本的掃描順序有正向掃描、逆向掃描和雙向掃描。匹配原則主要有最大匹配、最小匹配、逐詞匹配和最佳匹配。

最大匹配法(MM)。基本思想是:假設自動分詞詞典中的最長詞條所含漢字的個數為 i,則取被處理材料當前字元串序列中的前 i 個字元作為匹配欄位,查找分詞詞典,若詞典中有這樣一個 i 字詞,則匹配成功,匹配欄位作為一個詞被切分出來;若詞典中找不到這樣的一個 i 字詞,則匹配失敗,匹配欄位去掉最後一個漢字,剩下的字元作為新的匹配欄位,再進行匹配,如此進行下去,直到匹配成功為止。統計結果表明,該方法的錯誤率 為 1/169。

逆向最大匹配法(RMM)。該方法的分詞過程與 MM 法相同,不同的是從句子(或文章)末尾開始處理,每次匹配不成功時去掉的是前面的一個漢字。統計結果表明,該方法的錯誤率為 1/245。

逐詞遍歷法。把詞典中的詞按照由長到短遞減的順序逐字搜索整個待處理的材料,一直到把全部的詞切分出來為止。不論分詞詞典多大,被處理的材料多麼小,都得把這個分詞詞典匹配一遍。

設立切分標志法。切分標志有自然和非自然之分。自然切分標志是指文章中出現的非文字元號,如標點符號等;非自然標志是利用詞綴和不構成詞的詞(包 括單音詞、復音節詞以及象聲詞等)。設立切分標志法首先收集眾多的切分標志,分詞時先找出切分標志,把句子切分為一些較短的欄位,再用 MM、RMM 或其它的方法進行細加工。這種方法並非真正意義上的分詞方法,只是自動分詞的一種前處理方式而已,它要額外消耗時間掃描切分標志,增加存儲空間存放那些非 自然切分標志。

最佳匹配法(OM)。此法分為正向的最佳匹配法和逆向的最佳匹配法,其出發點是:在詞典中按詞頻的大小順序排列詞條,以求縮短對分詞詞典的檢索時 間,達到最佳效果,從而降低分詞的時間復雜度,加快分詞速度。實質上,這種方法也不是一種純粹意義上的分詞方法,它只是一種對分詞詞典的組織方式。OM 法的分詞詞典每條詞的前面必須有指明長度的數據項,所以其空間復雜度有所增加,對提高分詞精度沒有影響,分詞處理的時間復雜度有所降低。

此種方法優點是簡單,易於實現。但缺點有很多:匹配速度慢;存在交集型和組合型歧義切分問題;詞本身沒有一個標準的定義,沒有統一標準的詞集;不同詞典產生的歧義也不同;缺乏自學習的智能性。

基於統計的分詞方法

該方法的主要思想:詞是穩定的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰出現的概率或頻率能較好地反映成詞的可信度。可以對訓練文本中相鄰出現的各個字的組合的頻度進行統計,計算它們之間的互現信息。互現信息體現了漢字之間結合關系的緊密程度。當緊密程 度高於某一個閾值時,便可以認為此字組可能構成了一個詞。該方法又稱為無字典分詞。

該方法所應用的主要的統計模型有:N 元文法模型(N-gram)、隱馬爾可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、條件隨機場模型(Conditional Random Fields,CRF)等。

在實際應用中此類分詞演算法一般是將其與基於詞典的分詞方法結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

基於語義的分詞方法

語義分詞法引入了語義分析,對自然語言自身的語言信息進行更多的處理,如擴充轉移網路法、知識分詞語義分析法、鄰接約束法、綜合匹配法、後綴分詞法、特徵詞庫法、矩陣約束法、語法分析法等。

擴充轉移網路法

該方法以有限狀態機概念為基礎。有限狀態機只能識別正則語言,對有限狀態機作的第一次擴充使其具有遞歸能力,形成遞歸轉移網路 (RTN)。在RTN 中,弧線上的標志不僅可以是終極符(語言中的單詞)或非終極符(詞類),還可以調用另外的子網路名字分非終極符(如字或字串的成詞條件)。這樣,計算機在 運行某個子網路時,就可以調用另外的子網路,還可以遞歸調用。詞法擴充轉移網路的使用, 使分詞處理和語言理解的句法處理階段交互成為可能,並且有效地解決了漢語分詞的歧義。

矩陣約束法

其基本思想是:先建立一個語法約束矩陣和一個語義約束矩陣, 其中元素分別表明具有某詞性的詞和具有另一詞性的詞相鄰是否符合語法規則, 屬於某語義類的詞和屬於另一詞義類的詞相鄰是否符合邏輯,機器在切分時以之約束分詞結果。

基於理解的分詞方法

基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。目前基於理解的分詞方法主要有專家系統分詞法和神經網路分詞法等。

專家系統分詞法

從專家系統角度把分詞的知識(包括常識性分詞知識與消除歧義切分的啟發性知識即歧義切分規則)從實現分詞過程的推理機中獨立出來,使知識庫的維護與推理機的實現互不幹擾,從而使知識庫易於維護和管理。它還具有發現交集歧義欄位和多義組合歧義欄位的能力和一定的自學習功能。

神經網路分詞法

該方法是模擬人腦並行,分布處理和建立數值計算模型工作的。它將分詞知識所分散隱式的方法存入神經網路內部,通過自學習和訓練修改內部權值,以達到正確的分詞結果,最後給出神經網路自動分詞結果,如使用 LSTM、GRU 等神經網路模型等。

神經網路專家系統集成式分詞法

該方法首先啟動神經網路進行分詞,當神經網路對新出現的詞不能給出准確切分時,激活專家系統進行分析判斷,依據知識庫進行推理,得出初步分析,並啟動學習機制對神經網路進行訓練。該方法可以較充分發揮神經網路與專家系統二者優勢,進一步提高分詞效率。

以上便是對分詞演算法的基本介紹。

㈥ 部分常用分詞工具使用整理

以下分詞工具均能在Python環境中直接調用(排名不分先後)。

1、jieba(結巴分詞) 免費使用

2、HanLP(漢語言處理包) 免費使用

3、SnowNLP(中文的類庫) 免費使用

4、FoolNLTK(中文處理工具包) 免費使用

5、Jiagu(甲骨NLP) 免費使用

6、pyltp(哈工大語言雲) 商用需要付費

7、THULAC(清華中文詞法分析工具包) 商用需要付費

8、NLPIR(漢語分詞系統) 付費使用

1、jieba(結巴分詞)

「結巴」中文分詞:做最好的 Python 中文分片語件。

項目Github地址:jieba

安裝

pip install jieba

使用

import jieba

jieba.initialize()

text = '化妝和服裝'

words = jieba.cut(text)

words = list(words)

print(words)

2、HanLP(漢語言處理包)

HanLP是一系列模型與演算法組成的NLP工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。

項目Github地址:pyhanlp

安裝:

pip install pyhanlp

使用

import pyhanlp

text = '化妝和服裝'

words = []

for term in pyhanlp.HanLP.segment(text):

words.append(term.word)

print(words)

3、SnowNLP(中文的類庫)

SnowNLP是一個python寫的類庫,可以方便的處理中文文本內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這里沒有用NLTK,所有的演算法都是自己實現的,並且自帶了一些訓練好的字典。

項目Github地址:snownlp

安裝:

pip install snownlp

使用:

import snownlp

text = '化妝和服裝'

words = snownlp.SnowNLP(text).words

print(words)

4、FoolNLTK(中文處理工具包)

可能不是最快的開源中文分詞,但很可能是最準的開源中文分詞。

項目Github地址:FoolNLTK

安裝:

pip install foolnltk

使用:

import fool

text = '化妝和服裝'

words = fool.cut(text)

print(words)

5、Jiagu(甲骨NLP)

基於BiLSTM模型,使用大規模語料訓練而成。將提供中文分詞、詞性標注、命名實體識別、關鍵詞抽取、文本摘要、新詞發現等常用自然語言處理功能。參考了各大工具優缺點製作,將Jiagu回饋給大家。

項目Github地址:jiagu

安裝:

pip3 install jiagu

使用:

import jiagu

jiagu.init()

text = '化妝和服裝'

words = jiagu.seg(text)

print(words)

6、pyltp(哈工大語言雲)

pyltp 是 LTP 的 Python 封裝,提供了分詞,詞性標注,命名實體識別,依存句法分析,語義角色標注的功能。

項目Github地址:pyltp,3.4模型下載鏈接:網盤

安裝:

pip install pyltp

使用:

import pyltp

segmentor = pyltp.Segmentor()

segmentor.load('model/ltp_data_v3.4.0/cws.model') # 模型放置的路徑

text = '化妝和服裝'

words = segmentor.segment(text)

words = list(words)

print(words)

7、THULAC(清華中文詞法分析工具包)

THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與 社會 人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標注功能。

項目Github地址:THULAC-Python

安裝:

pip install thulac

使用:

import thulac

thu = thulac.thulac(seg_only=True)

text = '化妝和服裝'

words = thu.cut(text, text=True).split()

print(words)

NLPIR(漢語分詞系統)

主要功能包括中文分詞;英文分詞;詞性標注;命名實體識別;新詞識別;關鍵詞提取;支持用戶專業詞典與微博分析。NLPIR系統支持多種編碼、多種操作系統、多種開發語言與平台。

項目Github地址:pynlpir

安裝:

pip install pynlpir

下載證書覆蓋到安裝目錄,NLPIR.user 例如安裝目錄:/usr/lib64/python3.4/site-packages/pynlpir/Data

使用

import pynlpir

pynlpir.open()

text = '化妝和服裝'

words = pynlpir.segment(text, pos_tagging=False)

print(words)

pynlpir.close()

㈦ jieba分詞詳解

「結巴」分詞是一個Python 中文分片語件,參見 https://github.com/fxsjy/jieba
可以對中文文本進行 分詞、詞性標注、關鍵詞抽取 等功能,並且支持自定義詞典。

本文包括以下內容:
1、jieba分詞包的 安裝
2、jieba分詞的 使用教程
3、jieba分詞的 工作原理與工作流程
4、jieba分詞所涉及到的 HMM、TextRank、TF-IDF等演算法介紹

可以直接使用pip來進行安裝:
sudo pip install jieba
或者
sudo pip3 install jieba

關鍵詞抽取有兩種演算法,基於TF-IDF和基於TextRank:

jieba分詞有三種不同的分詞模式: 精確模式、全模式和搜索引擎模式

對應的,函數前加l即是對應得到list結果的函數:

精確模式是最常用的分詞方法,全模式會將句子中所有可能的詞都列舉出來,搜索引擎模式則適用於搜索引擎使用。具體的差別可在下一節工作流程的分析中詳述。

在上述每個函數中,都有名為HMM的參數。這一項表示是否在分詞過程中利用HMM進行新詞發現。關於HMM,本文附錄中將簡述相關知識。

另外分詞支持自定義字典,詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
具體使用方法為:

關鍵詞抽取的兩個函數的完整參數為:

可以通過

來打開或關閉並行分詞功能。
個人感覺一般用不到,大文件分詞需要手動實現多進程並行,句子分詞也不至於用這個。

jieba分詞主要通過詞典來進行分詞及詞性標注,兩者使用了一個相同的詞典。正因如此,分詞的結果優劣將很大程度上取決於詞典,雖然使用了HMM來進行新詞發現。
jieba分詞包整體的工作流程如下圖所示:

下面將根據源碼詳細地分析各個模塊的工作流程。

在之後幾節中,我們在 藍色的方框 中示範了關鍵步驟的輸出樣例或詞典文件的格式樣例。在本節中都採用類似的表示方式。

jieba分詞中,首先通過對照典生成句子的 有向無環圖 ,再根據選擇的模式不同,根據詞典 尋找最短路徑 後對句子進行截取或直接對句子進行截取。對於未登陸詞(不在詞典中的詞)使用 HMM 進行新詞發現。

詞典的格式應為
word1 freq1 word_type1
word2 freq2 word_type2

其中自定義用戶詞典中詞性word_type可以省略。
詞典在其他模塊的流程中可能也會用到,為方便敘述,後續的流程圖中將會省略詞典的初始化部分。

圖b演示了搜索引擎模式的工作流程,它會在精確模式分詞的基礎上,將長詞再次進行切分。

在這里我們假定讀者已經了解HMM相關知識,如果沒有可先行閱讀下一章內容中的HMM相關部分或者跳過本節。

在jieba分詞中,將字在詞中的位置B、M、E、S作為隱藏狀態,字是觀測狀態,使用了詞典文件分別存儲字之間的表現概率矩陣(finalseg/prob_emit.py)、初始概率向量(finalseg/prob_start.py)和轉移概率矩陣(finalseg/prob_trans.py)。這就是一個標準的 解碼問題 ,根據概率再利用 viterbi演算法 對最大可能的隱藏狀態進行求解。

詞性分析部分與分詞模塊用了同一個基礎的分詞器,對於詞典詞的詞性,將直接從詞典中提取,但是對於新詞,詞性分析部分有一個 專屬的新詞及其詞性的發現模塊
用於詞性標注的HMM模型與用於分詞的HMM模型相似,同樣將文字序列視為可見狀態,但是隱藏狀態不再是單單的詞的位置(B/E/M/S),而變成了詞的位置與詞性的組合,如(B,v)(B,n)(S,n)等等。因此其初始概率向量、轉移概率矩陣和表現概率矩陣和上一節中所用的相比都要龐大的多,但是其本質以及運算步驟都沒有變化。
具體的工作流程如下圖所示。

jieba分詞中有兩種不同的用於關鍵詞抽取的演算法,分別為TextRank和TF-IDF。實現流程比較簡單,其核心在於演算法本身。下面簡單地畫出實現流程,具體的演算法可以參閱下一章內容。

TextRank方法默認篩選詞性,而TF-IDF方法模型不進行詞性篩選。

在本章中,將會簡單介紹相關的演算法知識,主要包括用於新詞發現的 隱馬爾科夫模型 維特比演算法 、用於關鍵詞提取的 TextRank TF-IDF 演算法。

HMM即隱馬爾科夫模型,是一種基於馬爾科夫假設的統計模型。之所以為「隱」,是因為相較於馬爾科夫過程HMM有著未知的參數。在世界上,能看到的往往都是表象,而事物的真正狀態往往都隱含在表象之下,並且與表象有一定的關聯關系。

其中,S、O分別表示狀態序列與觀測序列。

如果讀者還對這部分內容心存疑問,不妨先往下閱讀,下面我們將以一個比較簡單的例子對HMM及解碼演算法進行實際說明與演示,在讀完下一小節之後再回來看這些式子,或許能夠恍然大悟。

下面以一個簡單的例子來進行闡述:
假設小明有一個網友小紅,小紅每天都會在朋友圈說明自己今天做了什麼,並且假設其僅受當天天氣的影響,而當天的天氣也只受前一天天氣的影響。
於小明而言,小紅每天做了什麼是可見狀態,而小紅那裡的天氣如何就是隱藏狀態,這就構成了一個HMM模型。一個HMM模型需要有五個要素:隱藏狀態集、觀測集、轉移概率、觀測概率和初始狀態概率。

即在第j個隱藏狀態時,表現為i表現狀態的概率。式中的n和m表示隱藏狀態集和觀測集中的數量。
本例中在不同的天氣下,小紅要做不同事情的概率也不同, 觀測概率 以表格的形式呈現如下:

其中

除此之外,還需要一個初始狀態概率向量π,它表示了觀測開始時,即t=0時,隱藏狀態的概率值。本例中我們指定 π={0,0,1}

至此,一個完整的 隱馬爾科夫模型 已經定義完畢了。

HMM一般由三類問題:
概率計算問題 ,即給定 A,B,π 和隱藏狀態序列,計算觀測序列的概率;
預測問題 ,也成解碼問題,已知 A,B,π 和觀測序列,求最優可能對應的狀態序列;
學習問題 ,已知觀測序列,估計模型的 A,B,π 參數,使得在該模型下觀測序列的概率最大,即用極大似然估計的方法估計參數。

在jieba分詞中所用的是解碼問題,所以此處對預測問題和學習問題不做深入探討,在下一小節中我們將繼續以本節中的例子為例,對解碼問題進行求解。

在jieba分詞中,採用了HMM進行新詞發現,它將每一個字表示為B/M/E/S分別代表出現在詞頭、詞中、詞尾以及單字成詞。將B/M/E/S作為HMM的隱藏狀態,而連續的各個單字作為觀測狀態,其任務即為利用觀測狀態預測隱藏狀態,並且其模型的 A,B,π 概率已經給出在文件中,所以這是一個標準的解碼問題。在jieba分詞中採用了 Viterbi演算法 來進行求解。

Viterbi演算法的基本思想是: 如果最佳路徑經過一個點,那麼起始點到這個點的路徑一定是最短路徑,否則用起始點到這點更短的一條路徑代替這段,就會得到更短的路徑,這顯然是矛盾的;從起始點到結束點的路徑,必然要經過第n個時刻,假如第n個時刻有k個狀態,那麼最終路徑一定經過起始點到時刻n中k個狀態里最短路徑的點
將時刻t隱藏狀態為i所有可能的狀態轉移路徑i1到i2的狀態最大值記為

下面我們繼續以上一節中的例子來對viterbi演算法進行闡述:
小明不知道小紅是哪裡人,他只能通過小紅每天的活動來推斷那裡的天氣。
假設連續三天,小紅的活動依次為:「睡覺-打游戲-逛街」,我們將據此計算最有可能的天氣情況。

表示第一天為雨天能夠使得第二天為晴天的概率最大(也就是說如果第二天是晴天在最短路徑上的話,第一天是雨天也一定在最短路徑上,參見上文中Viterbi演算法的基本思想)

此時已經到了最後的時刻,我們開始回溯。

其計算過程示意圖如下圖所示。

)的路徑。

TF-IDF(詞頻-逆文本頻率)是一種用以評估字詞在文檔中重要程度的統計方法。它的核心思想是,如果某個詞在一篇文章中出現的頻率即TF高,並且在其他文檔中出現的很少,則認為這個詞有很好的類別區分能力。

其中:

TextRank是一種用以關鍵詞提取的演算法,因為是基於PageRank的,所以先介紹PageRank。
PageRank通過互聯網中的超鏈接關系確定一個網頁的排名,其公式是通過一種投票的思想來設計的:如果我們計算網頁A的PageRank值,那麼我們需要知道哪些網頁鏈接到A,即首先得到A的入鏈,然後通過入鏈給網頁A進行投票來計算A的PR值。其公式為:

其中:

d為阻尼系數,取值范圍為0-1,代表從一定點指向其他任意點的概率,一般取值0.85。
將上式多次迭代即可直到收斂即可得到結果。

TextRank演算法基於PageRank的思想,利用投票機制對文本中重要成分進行排序。如果兩個詞在一個固定大小的窗口內共同出現過,則認為兩個詞之間存在連線。

公式與PageRank的基本相同。多次迭代直至收斂,即可得到結果。
在jieba分詞中,TextRank設定的詞窗口大小為5,將公式1迭代10次的結果作為最終權重的結果,而不一定迭代至收斂。

㈧ 自然語言處理(NLP)的基礎難點:分詞演算法

自然語言處理(NLP,Natural Language Processing)是人工智慧領域中的一個重要方向,主要研究人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理的底層任務由易到難大致可以分為詞法分析、句法分析和語義分析。分詞是詞法分析(還包括詞性標注和命名實體識別)中最基本的任務,也是眾多NLP演算法中必不可少的第一步,其切分准確與否往往與整體結果息息相關。

金融領域分詞的難點

分詞既簡單又復雜。簡單是因為分詞的演算法研究已經很成熟了,大部分的演算法(如HMM分詞、CRF分詞)准確率都可以達到95%以上;復雜則是因為剩下的5%很難有突破,主要可以歸結於三點:

▲粒度,即切分時的最小單位,不同應用對粒度的要求不一樣,比如「融資融券」可以是一個詞也可以是兩個詞

▲歧義,比如「恆生」一詞,既可指恆生公司,又可指恆生指數

▲未登錄詞,即未出現在演算法使用的詞典中的詞,比如不常見的專業金融術語,以及各種上市公司的名稱

在金融領域中,分詞也具有上述三個難點,並且在未登錄詞方面的難點更為突出,這是因為金融類詞彙本來就多,再加上一些專有名詞不僅有全稱還有簡稱,這就進一步增大了難度。

在實際應用中,以上難點時常會造成分詞效果欠佳,進而影響之後的任務。尤其是在一些金融業務中,有許多需要與用戶交互的場景,某些用戶會用口語化的詞彙描述業務,如果分詞錯誤會影響用戶意圖的解析,這對分詞的准確性提出了更高的要求。因此在進行NLP上層應用開發時,需要對分詞演算法有一定的了解,從而在效果優化時有能力對分詞器進行調整。接下來,我們介紹幾種常用的分詞演算法及其應用在金融中的優劣。

幾種常見的分詞演算法

分詞演算法根據其核心思想主要分為兩種:

第一種是基於字典的分詞,先把句子按照字典切分成詞,再尋找詞的最佳組合方式,包括最大匹配分詞演算法、最短路徑分詞演算法、基於N-Gram model的分詞演算法等;

第二種是基於字的分詞,即由字構詞,先把句子分成一個個字,再將字組合成詞,尋找最優的切分策略,同時也可以轉化成序列標注問題,包括生成式模型分詞演算法、判別式模型分詞演算法、神經網路分詞演算法等。

最大匹配分詞尋找最優組合的方式是將匹配到的最長片語合在一起,主要的思路是先將詞典構造成一棵Trie樹(也稱為字典樹),Trie樹由詞的公共前綴構成節點,降低了存儲空間的同時可以提升查找效率。

最大匹配分詞將句子與Trie樹進行匹配,在匹配到根結點時由下一個字重新開始進行查找。比如正向(從左至右)匹配「他說的確實在理」,得出的結果為「他/說/的確/實在/理」。如果進行反向最大匹配,則為「他/說/的/確實/在理」。

這種方式雖然可以在O(n)時間對句子進行分詞,但是只單向匹配太過絕對,尤其是金融這種詞彙較豐富的場景,會出現例如「交易費/用」、「報價單/位」等情況,所以除非某些詞的優先順序很高,否則要盡量避免使用此演算法。

最短路徑分詞演算法首先將一句話中的所有詞匹配出來,構成詞圖(有向無環圖DAG),之後尋找從起始點到終點的最短路徑作為最佳組合方式,例:

我們認為圖中每個詞的權重都是相等的,因此每條邊的權重都為1。

在求解DAG圖的最短路徑問題時,總是要利用到一種性質:即兩點之間的最短路徑也包含了路徑上其他頂點間的最短路徑。比如S->A->B->E為S到E到最短路徑,那S->A->B一定是S到B到最短路徑,否則會存在一點C使得d(S->C->B)<d(S->A->B),那S到E的最短路徑也會變為S->C->B->E,這就與假設矛盾了。利用上述的最優子結構性質,可以利用貪心演算法或動態規劃兩種求解演算法:

(1)基於Dijkstra演算法求解最短路徑,該演算法適用於所有帶權有向圖,求解源節點到其他所有節點的最短路徑,並可以求得全局最優解;

(2)N-最短路徑分詞演算法,該方法是對Dijkstra演算法的擴展,在每一步保存最短的N條路徑,並記錄這些路徑上當前節點的前驅,在最後求得最優解時回溯得到最短路徑。這種方法的准確率優於Dijkstra演算法,但在時間和空間復雜度上都更大。

相較於最大匹配分詞演算法,最短路徑分詞演算法更加靈活,可以更好地把詞典中的片語合起來,能更好地解決有歧義的場景。比如上述「他說的確實在理」這句話,用最短路徑演算法的計算結果為「他/說/的/確實/在理」,避免了正向最大匹配的錯誤。但是對於詞典中未存在的詞基本沒有識別能力,無法解決金融領域分詞中的「未登錄詞」難點。

N-Gram(又稱N元語法模型)是基於一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關。在此種假設下,可以簡化詞的條件概率,進而求解整個句子出現的概率。

現實中,常用詞的出現頻率或者概率肯定比罕見詞要大。因此,可以將求解詞圖最短路徑的問題轉化為求解最大概率路徑的問題,即分詞結果為「最有可能的詞的組合「。

計算詞出現的概率,僅有詞典是不夠的,還需要充足的語料,所以分詞任務已經從單純的「演算法」上升到了「建模」,即利用統計學方法結合大數據挖掘,對「語言」(句子出現的概率)進行建模。

我們將基於N-gram模型所統計出的概率分布應用到詞圖中,可以得到詞的概率圖。對該詞圖用最短路徑分詞演算法求解最大概率的路徑,即可得到分詞結果。

相較於前兩種分詞演算法,基於N-Gram model的分詞演算法對詞頻進行了統計建模,在切分有歧義的時候力求得到全局最優值,比如在切分方案「證券/自營/業務」和「證券/自/營業/務」中,統計出「證券/自營/業務」出現的概率更大,因此結果有更高的准確率。但也依然無法解決金融場景中未登錄詞的問題。

生成式模型主要有隱馬爾可夫模型(HMM,Hidden Markov Model)、樸素貝葉斯分類等。HMM是常用的分詞模型,基於Python的jieba分詞器和基於Java的HanLP分詞器都使用了HMM。

HMM模型認為在解決序列標注問題時存在兩種序列,一種是觀測序列,即人們顯性觀察到的句子,另一種是隱狀態序列,即觀測序列的標簽。假設觀測序列為X,隱狀態序列是Y,則因果關系為Y->X。因此要得到標注結果Y,必須對X的概率、Y的概率、P(X|Y)進行計算,即建立P(X,Y)的概率分布模型。

HMM演算法可以在一定程度上解決未登錄詞的問題,但生成式模型的准確率往往沒有接下來要談到的判別式模型高。

判別式模型主要有感知機、支持向量機(SVM,Support Vector Machine)、條件隨機場(CRF,Conditional Random Field)、最大熵模型等,其中感知機模型和CRF模型是常用的分詞模型。

(1)平均感知機分詞演算法

感知機是一種簡單的二分類線性模型,通過構造超平面,將特徵空間(輸入空間)中的樣本分為正負兩類。通過組合,感知機也可以處理多分類問題。但由於每次迭代都會更新模型的所有權重,被誤分類的樣本會造成很大影響,因此採用平均的方法,在處理完一部分樣本後對更新的權重進行平均。

(2)CRF分詞演算法

CRF可以看作一個無向圖模型,假設給定的標注序列為Y,觀測序列為X,CRF對條件概率P(Y|X)進行定義,而不是對聯合概率建模。

平均感知機演算法雖然速度快,但仍不夠准確。適合一些對速度要求高、對准確性要求相對不那麼高的場景。CRF分詞演算法可以說是目前最常用的分詞、詞性標注和實體識別演算法,它對未登陸詞也有很好的識別能力,是目前在速度、准確率以及未登錄詞識別上綜合表現最突出的演算法,也是我們目前所採用的解決方案,但速度會比感知機慢一些。

在NLP中,最常用的神經網路為循環神經網路(RNN,Recurrent Neural Network),它在處理變長輸入和序列輸入問題中有著巨大的優勢。LSTM(Long Short-Term Memory,長短期記憶網路)為RNN變種的一種,在一定程度上解決了RNN在訓練過程中梯度消失和梯度爆炸的問題。

目前對於序列標注任務,業內公認效果最好的模型是BiLSTM+CRF。相比於上述其它模型,雙向循環神經網路BiLSTM,可以更好地編碼當前字等上下文信息,並在最終增加CRF層,核心是用Viterbi演算法進行解碼,以得到全局最優解,避免B,S,E這種不可能的標記結果的出現,提高准確率。

神經網路分詞雖然能在准確率、未登錄詞識別上有更好的表現,但RNN無法並行計算,在速度上沒有優勢,所以該演算法通常在演算法研究、句子精確解析等對速度要求不高的場景下使用。

分詞作為NLP底層任務之一,既簡單又重要,很多時候上層演算法的錯誤都是由分詞結果導致的。因此,對於底層實現的演算法工程師,不僅需要深入理解分詞演算法,更需要懂得如何高效地實現和調試。

而對於上層應用的演算法工程師,在實際分詞時,需要根據業務場景有選擇地應用上述演算法,比如在搜索引擎對大規模網頁進行內容解析時,對分詞對速度要求大於精度,而在智能問答中由於句子較短,對分詞的精度要求大於速度。

㈨ 在python 環境下,使用結巴分詞,自動導入文本,分詞,提取關鍵詞.腳本 大俠給個

#-*-coding:UTF-8-*-

importjieba

__author__='lpe234'


seg_list=jieba.cut("我來到北京天安門",cut_all=True)
print','.join(seg_list)
...
Loadingmodelfromcache/var/folders/sv//T/jieba.cache
我,來到,北京,天安,天安門
Loadingmodelcost0.433seconds.
.

Processfinishedwithexitcode0

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:433
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:744
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:147
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:240
java駝峰 發布:2025-02-02 09:13:26 瀏覽:652
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726