• 你有一份斗破苍穹词库,请查收


    引言

    对于一个特定的领域而言,我们可能需要其相关的一些词语,这些词语可以用来进行分词、关键词提取、主题分析等。那么,如何去获得这些词语呢?本文接下来将通过斗破苍穹小说来介绍新词发现

    前言知识

    • 词频:词频就是一个词语在语料库中出现的次数,词频越大,表明以下三个参数出现的置信度越大。

    • 凝聚系数:表示两个单词同时出现的可能度,具体计算公式如下:

      其中,C(w1,w2)C(w1,w2)表示w1w1后面的词语是w2w2的次数,C(w1)C(w1)C(w2)C(w2)是词w1w1w2w2分别出现的次数。

    • 最小边界信息熵。

    • 最大边界信息熵。

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

    左边界信息熵计算公式如下:
    Entwl=wlP(wl|w)log(P(wl|w))Entwl=wlP(wl|w)log(P(wl|w))

    其中wlwl是出现在w左边的所有unigram组成的集合,上面的公式同样适用于右边界信息熵的计算。

    边界信息熵越大,表明一个词越能和更多词搭配,进而表明一个词是一个独立词。比如"我是"拥有大词频和大凝聚系数但是最小边界信息熵却很小,说明它不是一个词。举个例子:

    考虑这么一句话"吃葡萄不吐葡萄皮不吃葡萄倒吐葡萄皮","葡萄"一词出现了四次,其中左邻字分别为 {吃, 吐, 吃, 吐} ,右邻字分别为 {不, 皮, 倒, 皮} .

    根据公式,"葡萄"一词的左邻字的信息熵为:

    (1/2)·log(1/2)(1/2)·log(1/2)0.693(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(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

  • 相关阅读:
    OAuth2密码模式已死,最先进的Spring Cloud认证授权方案在这里
    DRM系列(13)之writeback_job介绍
    m1 rvm install 3.0.0 Error running ‘__rvm_make -j8‘
    子类继承了什么、多态、 向上转型
    《Linux内核设计与实现》
    基于CentOS使用宝塔+Nginx搭建个人小H站
    QT学习总结之QObject详解
    HBuilderX代码变量名称翻译插件
    深度分析自媒体短视频运营播放少,涨粉难的原因
    python ansible celery 实现任务异步执行(ArsyncResult问题)
  • 原文地址:https://www.cnblogs.com/xiximayou/p/16571608.html