你有一份鬥破蒼穹詞庫,請查收

引言

對於一個特定的領域而言,我們可能需要其相關的一些詞語,這些詞語可以用來進行分詞、關鍵詞提取、主題分析等。那麼,如何去獲得這些詞語呢?本文接下來將通過鬥破蒼穹小說來介紹新詞發現

前言知識

  • 詞頻:詞頻就是一個詞語在語料庫中出現的次數,詞頻越大,表明以下三個參數出現的置信度越大。

  • 凝聚係數:表示兩個單詞同時出現的可能度,具體計算公式如下:

    其中,\(C(w_1, w_2)\)表示\(w_{1}\)後面的詞語是\(w_{2}\)的次數,\(C(w_{1})\)\(C(w_{2})\)是詞\(w_{1}\)\(w_{2}\)分別出現的次數。

  • 最小邊界信息熵。

  • 最大邊界信息熵。

最小和最大邊界信息熵分別是左邊界信息熵和右邊界信息熵二者的最小值和最大值。

左邊界信息熵計算公式如下:
\(Ent_{w_l}=-\sum_{w_l}P(w_l|w)\cdot\log(P(w_l|w))\)

其中\(w_{l}\)是出現在w左邊的所有unigram組成的集合,上面的公式同樣適用於右邊界信息熵的計算。

邊界信息熵越大,表明一個詞越能和更多詞搭配,進而表明一個詞是一個獨立詞。比如"我是"擁有大詞頻和大凝聚係數但是最小邊界信息熵卻很小,說明它不是一個詞。舉個例子:

考慮這麼一句話"喫葡萄不吐葡萄皮不喫葡萄倒吐葡萄皮","葡萄"一詞出現了四次,其中左鄰字分別爲 {喫, 吐, 喫, 吐} ,右鄰字分別爲 {不, 皮, 倒, 皮} .

根據公式,"葡萄"一詞的左鄰字的信息熵爲:

\(- (1/2) · log(1/2) - (1/2) · log(1/2) ≈ 0.693\)

它的右鄰字的信息熵則爲:

\(- (1/2) · log(1/2) - (1/4) · log(1/4) - \ (1/4) · log(1/4) ≈ 1.04\)

可見,在這個句子中,"葡萄"一詞的右鄰字更加豐富一些。

實操

代碼地址:https://github.com/taishan1994/dpcq_new_word_find

  • 1、拷貝項目。

  • 2、在data下新建一個文件夾,文件名可以任取,最好是和自己數據集相關的名字,這裏是鬥破蒼穹。

  • 3、在discover.py裏面新建一個函數,用於讀取數據,針對於鬥破蒼穹:

    def get_dpcq():
      with open('data/鬥破蒼穹/鬥破蒼穹.txt', 'r', encoding='utf-8') as fp:
          data = fp.read().strip()
      data = data.replace("===", "")
      data = data.split('\n')
      # 不要開頭的'《鬥破蒼穹》來自: https://www.txt97.com/book/txt297.html'
      # 把===替換爲空
      data = data[1:]
      res = []
      from tqdm import tqdm
      for d in tqdm(data, ncols=100):
          if d == "":
              continue
          res.append(d.strip())
      return res
    

    返回的res中每一個元素是一個句子。

  • 在run_discover.py裏面導入剛纔的函數並加載:

    documents = get_dpcq()  # 這裏返回名爲doucuments不能變。
    corpus_name = "鬥破蒼穹"
    
  • 最後運行:

     python run_discover.py "data/鬥破蒼穹/鬥破蒼穹.txt" "reports" --latin 50 0 0 0 --bigram 20 80 0 1.5 --unigram_2 20 40 0 1 --unigram_3 20 41 0 1 --iteration 2 --verbose 2
    

    這裏說明一下每一個參數的作用:

    • 第一個參數是數據的地址。
    • 第二個參數是保存結果的地址。
    • latin、bigram、unigram_2、unigram_3後面的四個參數分別是頻率、凝聚係數、最小邊界熵、最大邊界熵。
    • 四種類型的新詞:
      • 拉丁詞,包括:純數字 (2333, 12315, 12306)、純字母 (iphone, vivo)、數字字母混合 (iphone7, mate9)
      • 兩個中文字符的unigram (unigrams被定義爲分詞器產生的元素):(蕭炎,異火,紫研)
      • 三個中文字符的unigram unigram:(小醫仙,雲嵐宗,鬥之氣)
      • bigrams, 每個bigram由兩個unigram組成(靈魂力量,加瑪帝國,納蘭嫣然)

結果

最後會在reports下生成以下文件:

以下顯示部分的結果:

兩個字的:

20.0 # 40.0 # 0.0 # 1.0 # 2	tf	agg_coef	max_entropy	min_entropy	left_entropy	right_entropy
蕭炎	44477	56.90328	8.34041	4.69988	4.69988	8.34041
令得	2154	66.94484	6.15161	4.03623	4.03623	6.15161
異火	2153	57.93440	6.18367	5.47363	6.18367	5.47363
聽得	1970	60.18430	6.24338	2.21533	2.21533	6.24338
紫研	1419	701.13603	6.79713	4.91935	4.91935	6.79713
納蘭	1284	741.42784	4.58498	1.47031	4.58498	1.47031
韓楓	953	1315.95708	7.18807	5.08946	5.08946	7.18807
魂殿	897	103.97270	5.73556	5.54795	5.73556	5.54795
鬥皇	892	94.79750	5.45420	3.16312	5.45420	3.16312
蘇千	842	558.08755	6.47207	4.06888	4.06888	6.47207
藥鼎	704	90.21435	5.00712	3.87745	5.00712	3.87745
鬥尊	696	43.95327	5.33022	3.23932	5.33022	3.23932

三個字的:

20.0 # 41.0 # 0.0 # 1.0 # 2	tf	agg_coef	max_entropy	min_entropy	left_entropy	right_entropy
小醫仙	1346	173967.58092	6.96497	3.31052	3.31052	6.96497
雲嵐宗	1340	236637.51952	6.26222	6.15050	6.26222	6.15050
妖凰族	361	132785.11397	4.81515	1.47622	1.47622	4.81515
大斗師	325	2382.22258	5.67791	4.85402	5.67791	4.85402
焚炎谷	260	27615.13220	5.34474	4.38391	5.34474	4.38391
鬥之氣	256	301.44918	4.83565	4.00525	4.83565	4.00525
莫天行	241	23245.22139	6.26152	4.24955	4.24955	6.26152
烏坦城	219	5169614.68463	4.97398	4.61440	4.97398	4.61440
鳳清兒	215	299254.34290	5.53344	4.35765	4.35765	5.53344
自蕭炎	141	53.93642	4.29877	3.81674	4.29877	3.81674
慕青鸞	134	1772983.90008	5.51582	3.17790	3.17790	5.51582
天冥宗	132	17017.90161	4.85124	4.71653	4.85124	4.71653
東龍島	130	262964.66995	5.09240	4.50574	5.09240	4.50574

總體的:

20.0 # 80.0 # 0.0 # 1.5 # 2	tf	agg_coef	max_entropy	min_entropy	left_entropy	right_entropy
望着	6429	88.62492	5.76639	3.29693	3.29693	5.76639
讓得	3282	158.42311	6.05628	5.00367	5.00367	6.05628
薰兒	2655	1075.93292	7.36769	4.51719	4.51719	7.36769
等人	2225	115.64243	6.58301	5.25368	5.25368	6.58301
煉藥師	2011	1434.44947	5.70378	5.21238	5.70378	5.21238
盯着	1620	95.54733	5.73287	3.40279	3.40279	5.73287
臉龐上	1601	139.93660	4.99613	4.53856	4.99613	4.53856
天空上	1383	151.95689	4.15316	3.98112	4.15316	3.98112
瞧得	1221	221.02698	6.17956	3.80053	3.80053	6.17956
不知道	1217	136.84007	7.17930	4.82474	4.82474	7.17930
今曰	1162	789.58121	6.29225	3.81237	3.81237	6.29225
略微有些	977	170.57313	7.90198	5.99135	5.99135	7.90198
海波東	964	2441.88382	6.54657	4.26189	4.26189	6.54657
不可能	948	262.75909	6.60016	4.68069	4.68069	6.60016
曰後	927	136.89882	6.12798	3.93988	3.93988	6.12798
靈魂力量	927	351.64736	5.96322	4.66934	4.66934	5.96322
加瑪帝國	919	1892.04722	5.86381	5.65998	5.65998	5.86381
納蘭嫣然	881	2016.11251	7.21520	4.36805	4.36805	7.21520
並沒有	868	197.49401	7.48791	5.03779	5.03779	7.48791
感覺到	865	243.88611	5.36146	4.61834	4.61834	5.36146
章 	846	1917.97647	9.09531	6.75345	6.75345	9.09531
小醫仙	844	1443.15544	6.06024	3.63423	3.63423	6.06024\

參考

http://www.matrix67.com/blog/archives/5044
https://github.com/Rayarrow/New-Word-Discovery

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章