分詞

小张睡醒了發表於2024-04-02

今天發現一個不用npl實現分詞的方法

jieba分詞

全自動安裝:

pip install jieba (window環境)
pip3 install jieba (Linux環境)

  1. 首先進行將語句轉換為UTF-8或者GBK。

  2. 然後根據使用者指定的模式,是否全模式,是否採用HMM隱馬爾科夫,來設定cut方式。

  3. 然後根據正則,將輸入文字分為一個個語句。

  4. 最後遍歷語句,對每個語句單獨進行分詞。

def calc(self, sentence, DAG, route):
    N = len(sentence)
    route[N] = (0, 0)
    logtotal = log(self.total)
    for idx in xrange(N - 1, -1, -1):
# route[idx] = (該漢字到最後一個漢字的最大路徑機率, 
  # 最大路徑機率時該漢字對應的詞語結束位置).
# 遍歷DAG中該漢位元組點的結束位置,也就是DAG[idx],
  # 計算idx到x之間構成的詞語的機率,然後乘以x到語句結束位置的最大機率,
  # 即可得到idx到語句結束的路徑最大機率.
        route[idx] = max(
                       (log(self.FREQ.get(sentence[idx:x + 1]) or 1) 
                        - log(total) 
                       + route[x + 1][0]
                     , x) for x in DAG[idx])
# 每個詞的機率 = 字典中該詞的詞數 / 字典總詞數。

相關文章