本文目錄一覽:
- 1、如何用python和jieba分詞,統計詞頻?
- 2、如何利用Python對中文進行分詞處理
- 3、Python中文分詞的原理你知道嗎?
- 4、jieba分詞(R vs. python)
- 5、如何用PYTHON做分詞處理
如何用python和jieba分詞,統計詞頻?
#! python3
# -*- coding: utf-8 -*-
import os, codecs
import jieba
from collections import Counter
def get_words(txt):
seg_list = jieba.cut(txt)
c = Counter()
for x in seg_list:
if len(x)1 and x != ‘\r\n’:
c[x] += 1
print(‘常用詞頻度統計結果’)
for (k,v) in c.most_common(100):
print(‘%s%s %s %d’ % (‘ ‘*(5-len(k)), k, ‘*’*int(v/3), v))
if __name__ == ‘__main__’:
with codecs.open(’19d.txt’, ‘r’, ‘utf8’) as f:
txt = f.read()
get_words(txt)
如何利用Python對中文進行分詞處理
python做中文分詞處理主要有以下幾種:結巴分詞、NLTK、THULAC
1、fxsjy/jieba
結巴的標語是:做最好的 Python 中文分片語件,或許從現在來看它沒做到最好,但是已經做到了使用的人最多。結巴分詞網上的學習資料和使用案例比較多,上手相對比較輕鬆,速度也比較快。
結巴的優點:
支持三種分詞模式
支持繁體分詞
支持自定義詞典
MIT 授權協議
2、THULAC:一個高效的中文詞法分析工具包
前兩天我在做有關於共享單車的用戶反饋分類,使用jieba分詞一直太過零散,分類分不好。後來江兄給我推薦了THULAC: 由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包 。THULAC的介面文檔很詳細,簡單易上手。
THULAC分詞的優點:
能力強。利用規模最大的人工分詞和詞性標註中文語料庫(約含5800萬字)訓練而成,模型標註能力強大。
準確率高。該工具包在標準數據集Chinese Treebank(CTB5)上分詞的F1值可達97.3%,詞性標註的F1值可達到92.9%
速度較快。同時進行分詞和詞性標註速度為300KB/s,每秒可處理約15萬字。只進行分詞速度達到1.3MB/s,速度比jieba慢
Python 解決中文編碼問題基本可以用以下邏輯:
utf8(輸入) —— unicode(處理) —— (輸出)utf8
Python 裡面處理的字元都是都是unicode 編碼,因此解決編碼問題的方法是把輸入的文本(無論是什麼編碼)解碼為(decode)unicode編碼,然後輸出時再編碼(encode)成所需編碼。
由於處理的一般為txt 文檔,所以最簡單的方法,是把txt 文檔另存為utf-8 編碼,然後使用Python 處理的時候解碼為unicode(sometexts.decode(‘utf8’)),輸出結果回txt 的時候再編碼成utf8(直接用str() 函數就可以了)。
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 等神經網路模型等。
神經網路專家系統集成式分詞法
該方法首先啟動神經網路進行分詞,當神經網路對新出現的詞不能給出準確切分時,激活專家系統進行分析判斷,依據知識庫進行推理,得出初步分析,並啟動學習機制對神經網路進行訓練。該方法可以較充分發揮神經網路與專家系統二者優勢,進一步提高分詞效率。
以上便是對分詞演算法的基本介紹。
jieba分詞(R vs. python)
自然語言處理(NLP)是機器學習重要分支之一,主要應用於篇章理解、文本摘要、情感分析、知識圖譜、文本翻譯等領域。而NLP應用首先是對文本進行分詞,當前中文分詞器有Ansj、paoding、盤古分詞等多種,而最基礎的分詞器應該屬於jieba分詞器(比較見下圖)。
下面將分別應用R和python對jieba分詞器在中文分詞、詞性標註和關鍵詞提取領域的應用進行比較。
R實現
通過函數worker()來初始化分詞引擎,使用segment()進行分詞。有四種分詞模式:最大概率法(MP)、隱馬爾科夫模型(HMM)、混合模型(Mix)及索引模型(query),默認為混合模型。具體可查看help(worker).
#install.packages(‘jiebaR’)library(jiebaR)mixseg – worker()segment( “這是一段測試文本” , mixseg ) #或者用以下操作mixseg[‘這是一段測試文本’]mixseg = “這是一段測試文本”
python實現
python中需安裝jieba庫,運用jieba.cut實現分詞。cut_all參數為分詞類型,默認為精確模式。
import jiebaseg_list = jieba.cut(u”這是一段測試文本”,cut_all = False)print(“Full mode: “+ “,”.join(seg_list)) #默認精確模式
無論是R還是python都為utf—8編碼。
R實現
可以使用=.tagger 或者tag 來進行分詞和詞性標註,詞性標註使用混合模型模型分詞,標註採用和 ictclas 兼容的標記法。
words = “我愛北京天安門”tagger = worker(“tag”) #開啟詞性標註啟發器tagger = words # r v ns ns # “我” “愛” “北京” “天安門”
python實現
#詞性標註import jieba.posseg as psegwords = pseg.cut(“我愛北京天安門”)for word,flag in words: print(‘%s, %s’ %(word,flag))
R實現
R關鍵詞提取使用逆向文件頻率(IDF)文本語料庫,通過worker參數「keywords」開啟關鍵詞提取啟發器,topn參數為關鍵詞的個數。
keys = worker(“keywords”,topn = 5, idf = IDFPATH)keys = “會議邀請到美國密歇根大學(University of Michigan, Ann Arbor)環境健康科學系副教授奚傳武博士作題為「Multibarrier approach for safe drinking waterin the US : Why it failed in Flint」的學術講座,介紹美國密歇根Flint市飲用水污染事故的發生髮展和處置等方面內容。講座後各相關單位同志與奚傳武教授就生活飲用水在線監測系統、美國水污染事件的處置方式、生活飲用水老舊管網改造、如何有效減少消毒副產物以及美國涉水產品和二次供水單位的監管模式等問題進行了探討和交流。本次交流會是我市生活飲用水衛生管理工作洽商機制運行以來的又一次新嘗試,也為我市衛生計生綜合監督部門探索生活飲用水衛生安全管理模式及突發水污染事件的應對措施開拓了眼界和思路。”#結果:# 48.8677 23.4784 22.1402 20.326 18.5354 # “飲用水” “Flint” “衛生” “水污染” “生活”
python實現
python實現關鍵詞提取可運用TF-IDF方法和TextRank方法。allowPOS參數為限定範圍詞性類型。
#關鍵詞提取import jieba.analysecontent = u’會議邀請到美國密歇根大學(University of Michigan, Ann Arbor)環境健康科學系副教授奚傳武博士作題為「Multibarrier approach for safe drinking waterin the US : Why it failed in Flint」的學術講座,介紹美國密歇根Flint市飲用水污染事故的發生髮展和處置等方面內容。講座後各相關單位同志與奚傳武教授就生活飲用水在線監測系統、美國水污染事件的處置方式、生活飲用水老舊管網改造、如何有效減少消毒副產物以及美國涉水產品和二次供水單位的監管模式等問題進行了探討和交流。本次交流會是我市生活飲用水衛生管理工作洽商機制運行以來的又一次新嘗試,也為我市衛生計生綜合監督部門探索生活飲用水衛生安全管理模式及突發水污染事件的應對措施開拓了眼界和思路。’#基於TF-IDFkeywords = jieba.analyse.extract_tags(content,topK = 5,withWeight = True,allowPOS = (‘n’,’nr’,’ns’))for item in keywords: print item[0],item[1] #基於TF-IDF結果# 飲用水 0.448327672795# Flint 0.219353532163# 衛生 0.203120821773# 水污染 0.186477211628# 生活 0.170049997544
#基於TextRankkeywords = jieba.analyse.textrank(content,topK = 5,withWeight = True,allowPOS = (‘n’,’nr’,’ns’))for item in keywords: print item[0],item[1] #基於TextRank結果:# 飲用水 1.0# 美國 0.570564785973# 奚傳武 0.510738424509# 單位 0.472841889334# 講座 0.443770732053
寫在文後
自然語言處理(NLP)在數據分析領域有其特殊的應用,在R中除了jiebaR包,中文分詞Rwordseg包也非常常用。一般的文本挖掘步驟包括:文本獲取(主要用網路爬取)——文本處理(分詞、詞性標註、刪除停用詞等)——文本分析(主題模型、情感分析)——分析可視化(詞雲、知識圖譜等)。本文是自然語言處理的第一篇,後續將分別總結下應用深度學習Word2vec進行詞嵌入以及主題模型、情感分析的常用NLP方法。
參考資料
Introduction · jiebaR 中文分詞
知乎:【文本分析】利用jiebaR進行中文分詞
雪晴數據網:全棧數據工程師養成攻略
搜狗實驗室,詞性標註應用
【R文本挖掘】中文分詞Rwordseg
如何用PYTHON做分詞處理
可以利用python的jieba分詞,得到文本中出現次數較多的詞。
首先pip安裝一下jieba,這個可以分詞
然後用計數器Counter()統計一下得到的分詞中各詞的數量
最後most_common(5),是列印出排名前五位的詞(包括特殊符號)
#encoding:utf-8
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)
import jieba
from collections import Counter
str1 = open(‘tips.txt’).read()
wordlist_after_jieba = jieba.cut(str1, cut_all = True)
list_wl = Counter(wordlist_after_jieba)
for i in list_wl.most_common(5):
print i[0],i[1]
原創文章,作者:EGQO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148453.html