日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中文分词_中文分词及其应用

發布時間:2025/3/13 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中文分词_中文分词及其应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、中文分詞原理

中文分詞是指將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。現有的分詞方法可分為三大類,分別是基于字符串匹配的分詞方法基于理解的分詞方法基于統計的分詞方法

(一)基于字符串匹配的分詞方法

基于字符串匹配的分詞方法又稱機械分詞方法,它是按照一定的策略將需要分析的中文字串與一個“充分大的”機器詞典中的詞條進行匹配,若在詞典中找到某個字符串,則匹配成功(識別出一個詞)。該類算法的優點是速度快,實現簡單,效果尚可,但對歧義和未登錄詞處理效果不佳。

按照掃描方向的不同,字符串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,可以分為單純分詞方法和分詞與詞性標注相結合的一體化方法。常用的字符串匹配方法主要有四種,分別是正向最大匹配法(從左到右的方向)、逆向最大匹配法(從右到左的方向)、最小切分(每一句中切出的詞數最小)、雙向最大匹配(進行從左到右、從右到左兩次掃描)。

(二)基于理解的分詞方法

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

(三)基于統計的分詞方法

基于統計的分詞方法是在給定大量已經分詞的文本的前提下,利用統計機器學習模型學習詞語切分的規律(稱為訓練),從而實現對未知文本的切分。例如最大概率分詞方法和最大熵分詞方法等。隨著大規模語料庫的建立,統計機器學習方法的研究和發展,基于統計的中文分詞方法漸漸成為了主流方法,主要的統計模型有:N元文法模型、隱馬爾可夫模型、最大熵模型、條件隨機場模型等。

在實際的應用中,基于統計的分詞系統都需要使用分詞詞典來進行字符串匹配分詞,同時使用統計方法識別一些新詞,即將字符串頻率統計和字符串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

二、中文分詞工具

(一)jieba?分詞

jieba分詞是目前使用人數較多的中文分詞工具。jieba分詞支持精確模式、全模式、搜索引擎模式這三種模式。精確模式試圖將句子最精確地切開,適合文本分析;全模式可以把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;搜索引擎模式是在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。示例代碼及結果見圖1。

jieba分詞過程中主要涉及以下幾種算法:(1)基于前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG);(2)采用了動態規劃查找最大概率路徑, 找出基于詞頻的最大切分組合;(3)對于未登錄詞,采用了基于漢字成詞能力的?HMM 模型(隱馬爾可夫模型),采用Viterbi算法進行計算;(4)基于Viterbi算法做詞性標注;(5)基于tf-idf和textrank模型抽取關鍵詞。

import jieba# 精準模式print("|".join(jieba.cut("今天天氣不錯,我來到北京野生動物園,在野生動物園看到有很多兇猛的動物",cut_all=False)))# 全模式print("|".join(jieba.cut("今天天氣不錯,我來到北京野生動物園,在野生動物園看到有很多兇猛的動物",cut_all=True)))# 搜索引擎模式print("|".join(jieba.cut_for_search("今天天氣不錯,我來到北京野生動物園,在野生動物園看到有很多兇猛的動物")))

圖1? jieba分詞三種模式結果

(二)jieba分詞的應用

1?文本的表示

在對文本進行處理之前,需要對文本進行數學表示,其中一種方法為詞向量。基本思路是,在已建立的詞庫基礎上,根據文本中各詞匯進行位置判斷,最后構成向量表示文本。對文本進行向量表示的前提是對文本進行拆分,因此需要對文本進行中文分詞。示例代碼及結果見圖2。

import jieba# 詞庫word_vector_list = ["我們","來","學習","人工智能","和","Python"]# 用戶輸入的語句s1 = "我來學習Python"s2 = "我學習人工智能"# 轉化成向量的方法def get_vector(data): vector_list = [] for i in word_vector_list: if i in list(jieba.cut(data)): vector_list.append(1) else: vector_list.append(0) return vector_list# 打印向量print(get_vector(s1))print(get_vector(s2))

圖2??文本的向量表示

2?文本相似度的計算

實現了文本的向量表示后,可以進行文本間距離的計算,即文本相似度計算。在文本相似度的計算中,比較常見的一種相似度計算方式為余弦相似度,余弦相似度的本質是計算兩點所構成向量夾角的余弦值,如圖3所示。

圖3 ?余弦相似度計算

三、中文分詞的應用:簡單的聊天機器人開發

通過中文分詞以及文本向量表示,可以實現對文本的解析,在此基礎上,可進行簡單聊天機器人的開發,其程序邏輯為:1數據準備:預先建立fenci.txt文件存儲一段文字,通過對文字的分詞處理構建語料庫;預先建立的content_file.txt文件存儲了一些標題和回帖的內容,這些內容是來源于網上的一些帖子內容。我們把title看作是相關的聊天主題,而reply看作是回答的答案。2主程序的構建:a.用戶輸入一段文本;b.對用戶輸入的文本進行分詞;c.把用戶輸入的結果與content_file.txt文件中的title字段進行相似度計算,匹配到最為相似的主題;d.以最大相似度主題下的reply內容作為答案進行輸出。(fenci.txt文件和content_file.txt文件部分內容展示見圖4、圖5)具體代碼如下:

圖4??fenci.txt文件部分內容

圖5??content_file.txt文件部分內容

f1 = open("D:\軟件\PyCharm Community Edition 2020.1.2\項目\項目\projects-ch2-chatbot\夸夸機器人\\fenci.txt",encoding='utf-8')f2 = open("fenci_res.txt",'a',encoding='utf-8')lines = f1.readlines()for line in lines: line.replace("\t","").replace("\n","").replace(" ","").replace("!","").replace("\r","") line = re.sub(r"[0-9\s+_,$%^*()?;;:-【】\"\'\/\s\,\.\~]+|[+—!,;:。?、~@#¥%…&*()]+","",line) seg_list = jieba.cut(line) # for i in seg_list: # #print(i) # word_list.append(i) f2.write(" ".join(seg_list))f1.close()f2.close()# print(word_list)sentences = word2vec.Text8Corpus("fenci_res.txt")model = word2vec.Word2Vec(sentences)model.save("word2vec.model")model = word2vec.Word2Vec.load("word2vec.model")while True: word_list = [] words = input("輸入>>") words =re.sub(r"[0-9\s+_,$%^*()?;;:-【】\"\'\/\s\,\.\~]+|[+—!,;:。?、~@#¥%…&*()]+","",words) if words == "再見": print("再見!") break words_gen = jieba.cut(words) for i in words_gen: word_list.append(i) #print(word_list) file = open("content_file.txt",encoding='utf-8') answers = json.load(file) max_similarity = 0 max_title = '' max_answer = [] for line in answers: answer_list = [] answer = jieba.cut(line['title']) for i in answer: answer_list.append(i) try: similarity = model.wv.n_similarity(word_list,answer_list) except: continue if similarity >= max_similarity: max_similarity = similarity max_title = line['title'] max_answer = line['reply'] if max_title != '': print("最相似的問題為:{0},相似度為{1}".format(max_title,max_similarity)) index = random.randint(0,len(max_answer)-1) choosed_answer = max_answer[index] print(choosed_answer) else:????????print("未找到合適的答案")

總結

以上是生活随笔為你收集整理的中文分词_中文分词及其应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。