无词典分词

看了互联网时代的社会语言学:基于SNS的文本数据挖掘

blog地址:http://www.matrix67.com/blog/archives/5044

全文思路

1、介绍了无词典分词,且要考虑两个因素,一是内部凝固程度,二是外部自由程度

2、举例说明,使用后缀数组,以O(nlogn)的时间复杂度来实现该算法

3、介绍应用场景

白话文

1、不需要词典就把这句话给分了,有两个重点考核,一是排除那些是因为字偶然碰在一起形成的“词”,比如“的电影”;二是排除那些扩展性差的“词”,比如“辈子”

2、暂时不涉及

3、暂时不涉及

我的体会

抛开应用背景不讲,我关心的还是无词典分词,以下讲讲我的理解

细节上讲,如何算该词的概率,或者说如何算该字的概率,是我的第一个问题,这个概率的分母是什么,比如,P(“电影”) = count(“电影”)/所有的词的个数?那P(“的”)又是什么呢?是等于count(“的”)/所有单个字的个数么?

理解凝固程度和自由程度之后,若不接下来看的,我设计的算法会是这样子的,我会先得到每个可能的组合,比如对一个句读来说“我去电影院”:

1、得到每一种可能组合,我就得到了“我去”、“去电”、“电影”、“影院”,“我去电”,“去电影”、“电影院”、“我去电影”、“去电影院”、“我去电影院”,之后首先判断这些组合出现的频率是不是大于我设的阈值,比如说“电影”、“电影院”、“去电影院”都大于我设的阈值,

2、就下来就要判断内部凝固程度,以“电影院”为例,取P(“电影院”)/ (P(“电影”) * P(“院”))和P(“电影院”)/ (P(“电”) * P(“影院”))的较小值,我解释下为什么去较小值,首先,分子肯定是比分母大的,如果,分母和分子是在同一数量级的,甚至相等的话,那意味着这是这词凝固力不高,是可以拆分的,只要有一种拆分的可能,那就说凝固力不高。因此取较小值。这样就成功地剔除了一部分不符合要求的组合

3、再来判断自由程度,这个在我算法就显得格外麻烦,因为这个要看这个词前面和后面的字的信息,才能算出信息熵,所以我得对我每个组合,去全文检索一篇,在算信息熵,看是不是大于我的阈值。

文中举了一个例子,是采用后缀数组实现,效率比我想到的不知道高了多少。

博文100篇,纪念一下,再接再厉。

原文地址:https://www.cnblogs.com/chuanlong/p/3087565.html