成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

jieba分詞學(xué)習(xí)筆記(二)

fxp / 3016人閱讀

分詞模式

jieba分詞有多種模式可供選擇??蛇x的模式包括:

全切分模式

精確模式

搜索引擎模式

同時(shí)也提供了HMM模型的開(kāi)關(guān)。

其中全切分模式就是輸出一個(gè)字串的所有分詞,

精確模式是對(duì)句子的一個(gè)概率最佳分詞,

而搜索引擎模式提供了精確模式的再分詞,將長(zhǎng)詞再次拆分為短詞。

效果大抵如下:

# encoding=utf-8
import jieba

seg_list = jieba.cut("我來(lái)到北京清華大學(xué)", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我來(lái)到北京清華大學(xué)", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精確模式

seg_list = jieba.cut("他來(lái)到了網(wǎng)易杭研大廈")  # 默認(rèn)是精確模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明碩士畢業(yè)于中國(guó)科學(xué)院計(jì)算所,后在日本京都大學(xué)深造")  # 搜索引擎模式
print(", ".join(seg_list))

的結(jié)果為

【全模式】: 我/ 來(lái)到/ 北京/ 清華/ 清華大學(xué)/ 華大/ 大學(xué)

【精確模式】: 我/ 來(lái)到/ 北京/ 清華大學(xué)

【新詞識(shí)別】:他, 來(lái)到, 了, 網(wǎng)易, 杭研, 大廈    (此處,“杭研”并沒(méi)有在詞典中,但是也被Viterbi算法識(shí)別出來(lái)了)

【搜索引擎模式】: 小明, 碩士, 畢業(yè), 于, 中國(guó), 科學(xué), 學(xué)院, 科學(xué)院, 中國(guó)科學(xué)院, 計(jì)算, 計(jì)算所, 后, 在, 日本, 京都, 大學(xué), 日本京都大學(xué), 深造

其中,新詞識(shí)別即用HMM模型的Viterbi算法進(jìn)行識(shí)別新詞的結(jié)果。

值得詳細(xì)研究的模式是精確模式,以及其用于識(shí)別新詞的HMM模型和Viterbi算法。

jieba.cut()

在載入詞典之后,jieba分詞要進(jìn)行分詞操作,在代碼中就是核心函數(shù)jieba.cut(),代碼如下:

 def cut(self, sentence, cut_all=False, HMM=True):
        """
        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.
            - HMM: Whether to use the Hidden Markov Model.
        """
        sentence = strdecode(sentence)

        if cut_all:
            re_han = re_han_cut_all
            re_skip = re_skip_cut_all
        else:
            re_han = re_han_default
            re_skip = re_skip_default
        if cut_all:
            cut_block = self.__cut_all
        elif HMM:
            cut_block = self.__cut_DAG
        else:
            cut_block = self.__cut_DAG_NO_HMM
        blocks = re_han.split(sentence)
        for blk in blocks:
            if not blk:
                continue
            if re_han.match(blk):
                for word in cut_block(blk):
                    yield word
            else:
                tmp = re_skip.split(blk)
                for x in tmp:
                    if re_skip.match(x):
                        yield x
                    elif not cut_all:
                        for xx in x:
                            yield xx
                    else:
                        yield x

其中,

docstr中給出了默認(rèn)的模式,精確分詞 + HMM模型開(kāi)啟。

第12-23行進(jìn)行了變量配置。

第24行做的事情是對(duì)句子進(jìn)行中文的切分,把句子切分成一些只包含能處理的字符的塊(block),丟棄掉特殊字符,因?yàn)橐恍┰~典中不包含的字符可能對(duì)分詞產(chǎn)生影響。

24行中re_han默認(rèn)值為re_han_default,是一個(gè)正則表達(dá)式,定義如下:

# u4E00-u9FD5a-zA-Z0-9+#&._ : All non-space characters. Will be handled with re_han
re_han_default = re.compile("([u4E00-u9FD5a-zA-Z0-9+#&._]+)", re.U)

可以看到諸如空格、制表符、換行符之類的特殊字符在這個(gè)正則表達(dá)式被過(guò)濾掉。

25-40行使用yield實(shí)現(xiàn)了返回結(jié)果是一個(gè)迭代器,即文檔中所說(shuō):

jieba.cut 以及 jieba.cut_for_search 返回的結(jié)構(gòu)都是一個(gè)可迭代的 generator,可以使用 for 循環(huán)來(lái)獲得分詞后得到的每一個(gè)詞語(yǔ)(unicode)

其中,31-40行,如果遇到block是非常規(guī)字符,就正則驗(yàn)證一下直接輸出這個(gè)塊作為這個(gè)塊的分詞結(jié)果。如標(biāo)點(diǎn)符號(hào)等等,在分詞結(jié)果中都是多帶帶一個(gè)詞的形式出現(xiàn)的,就是這十行代碼進(jìn)行的。

關(guān)鍵在28-30行,如果是可分詞的block,那么就調(diào)用函數(shù)cut_block,默認(rèn)是cut_block = self.__cut_DAG,進(jìn)行分詞

jieba.__cut_DAG()

__cut_DAG的作用是按照DAG,即有向無(wú)環(huán)圖進(jìn)行切分單詞。其代碼如下:

def __cut_DAG(self, sentence):
        DAG = self.get_DAG(sentence)
        route = {}
        self.calc(sentence, DAG, route)
        x = 0
        buf = ""
        N = len(sentence)
        while x < N:
            y = route[x][1] + 1
            l_word = sentence[x:y]
            if y - x == 1:
                buf += l_word
            else:
                if buf:
                    if len(buf) == 1:
                        yield buf
                        buf = ""
                    else:
                        if not self.FREQ.get(buf):
                            recognized = finalseg.cut(buf)
                            for t in recognized:
                                yield t
                        else:
                            for elem in buf:
                                yield elem
                        buf = ""
                yield l_word
            x = y

        if buf:
            if len(buf) == 1:
                yield buf
            elif not self.FREQ.get(buf):
                recognized = finalseg.cut(buf)
                for t in recognized:
                    yield t
            else:
                for elem in buf:
                    yield elem

對(duì)于一個(gè)sentence,首先 獲取到其有向無(wú)環(huán)圖DAG,然后利用dp對(duì)該有向無(wú)環(huán)圖進(jìn)行最大概率路徑的計(jì)算。
計(jì)算出最大概率路徑后迭代,如果是登錄詞,則輸出,如果是單字,將其中連在一起的單字找出來(lái),這些可能是未登錄詞,使用HMM模型進(jìn)行分詞,分詞結(jié)束之后輸出。

至此,分詞結(jié)束。

其中,值得跟進(jìn)研究的是第2行獲取DAG,第4行計(jì)算最大概率路徑第20和34行的使用HMM模型進(jìn)行未登錄詞的分詞,在后面的文章中會(huì)進(jìn)行解讀。

DAG = self.get_DAG(sentence)

    ...

self.calc(sentence, DAG, route)

    ...

recognized = finalseg.cut(buf)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/37653.html

相關(guān)文章

  • jieba分詞學(xué)習(xí)筆記(三)

    摘要:由此得到了,下一步就是使用動(dòng)態(tài)規(guī)劃對(duì)最大概率路徑進(jìn)行求解。最大概率路徑值得注意的是,的每個(gè)結(jié)點(diǎn),都是帶權(quán)的,對(duì)于在詞典里面的詞語(yǔ),其權(quán)重為其詞頻,即。動(dòng)態(tài)規(guī)劃求解法滿足的條件有兩個(gè)重復(fù)子問(wèn)題最優(yōu)子結(jié)構(gòu)我們來(lái)分析最大概率路徑問(wèn)題。 DAG(有向無(wú)環(huán)圖) 有向無(wú)環(huán)圖,directed acyclic graphs,簡(jiǎn)稱DAG,是一種圖的數(shù)據(jù)結(jié)構(gòu),其實(shí)很naive,就是沒(méi)有環(huán)的有向圖_(:...

    nevermind 評(píng)論0 收藏0
  • 分詞,難在哪里?科普+解決方案!

    摘要:分詞的算法中文分詞有難度,不過(guò)也有成熟的解決方案。例如通過(guò)人民日?qǐng)?bào)訓(xùn)練的分詞系統(tǒng),在網(wǎng)絡(luò)玄幻小說(shuō)上,分詞的效果就不會(huì)好。三的優(yōu)點(diǎn)是開(kāi)源的,號(hào)稱是中,最好的中文分詞組件。 showImg(https://segmentfault.com/img/remote/1460000016359704?w=1350&h=900); 題圖:by Lucas Davies 一、前言 分詞,我想是大多數(shù)...

    Steven 評(píng)論0 收藏0
  • Python第三方庫(kù)jieba庫(kù)與中文分詞全面詳解

      Python在工作中的應(yīng)用還是比較的廣泛的,市場(chǎng)上面對(duì)于這類人才開(kāi)出的薪資還是比較的高的。那么,如何使用第三方庫(kù)jieba庫(kù)與中文分詞進(jìn)行一個(gè)分解呢?下面小編就給大家詳細(xì)的做出一個(gè)解答。  一、什么是jieba庫(kù)  jieba是優(yōu)秀的中文分詞第三方庫(kù),由于中文文本之間每個(gè)漢字都是連續(xù)書(shū)寫(xiě)的,我們需要通過(guò)特定的手段來(lái)獲得其中的每個(gè)詞組,這種手段叫做分詞,我們可以通過(guò)jieba庫(kù)來(lái)完成這個(gè)過(guò)程。 ...

    89542767 評(píng)論0 收藏0
  • Python如何生成詞云(詳解)

    摘要:前言今天教大家用模塊來(lái)生成詞云,我讀取了一篇小說(shuō)并生成了詞云,先看一下效果圖效果圖一效果圖二根據(jù)效果圖分析的還是比較準(zhǔn)確的,小說(shuō)中的主人公就是程理,所以出現(xiàn)次數(shù)最多。 前言 今天教大家用wrodcloud模塊來(lái)生成詞云,我讀取了一篇小說(shuō)并生成了詞云,先看一下效果圖: 效果圖一: showImg(https://segmentfault.com/img/remote/1460000015...

    Juven 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<