如何快速正確分詞,對於SEO來說,是提取tags聚合,信息關聯的好幫手。
目前很多分詞工具都是基於一元的分詞法,需要詞庫來輔助。
通過對Google黑板報第一章的學習,如何利用統計模型進行分詞。
本方法考慮了3個維度:
凝聚程度:兩個字連續出現的概率並不是各自獨立的程度。例如“上”出現的概率是1×10^-5,”床”出現的概率是1×10^-10,如果這兩個字的凝聚程度低,則”上床”出現的概率應該和1×10^-15接近,但是事實上”上床”出現的概率在1×10^-11次方,遠高於各自獨立概率之積。所以我們可以認為“上床”是一個詞。
左鄰字聚合熵:分出的詞左邊一個字的信息量,比如”巴掌”,基本只能用於”打巴掌”,“一巴掌”,“拍巴掌”,反之”過去”這個詞,前面可以用“走過去”,“跑過去”,“爬過去”,“打過去”,“混過去”,“睡過去”,“死過去”,“飛過去”等等,信息熵就非常高。
右鄰字聚合熵:分出的詞右邊一個詞的信息量,同上。
下面是一個利用Python實現的demo(轉自:http://www.webinfoextract.com/forum.php?mod=viewthread&tid=20)
#!/bin/sh
python ./splitstr.py > substr.freq
python ./cntfreq.py > word.freq
python ./findwords.py > result
sort -t" " -r -n -k 2 result > result.sort
splitstr.py,切分出字數在10以內的子字符串,計算詞頻,左鄰字集合熵,右鄰字集合熵,並輸出出現10次以上的子字符串:
import math
def compute_entropy(word_list):
wdict={}
tot_cnt=0
for w in word_list:
if w not in wdict:
wdict[w] = 0
wdict[w] += 1
tot_cnt+=1
ent=0.0
for k,v in wdict.items():
p=1.0*v/tot_cnt
ent -= p * math.log(p)
return ent
def count_substr_freq():
fp = open("./video.corpus")
str_freq={}
str_left_word={}
str_right_word={}
tot_cnt=0
for line in fp:
&nbs