[ N-gram 歧义句识别 ]
使用的中文文本语料(感谢原作者)
使用的bi-gram词频统计(感谢原作者)
1. 目的
对于某句话,检测其是否有交集型歧义。例如,南京市长江大桥,根据断句的不同,可以有以下两种理解:
- 南京市 / 长江大桥
- 南京 / 市长 / 江大桥
2. 方法思路
对于某个句子,根据词典,找到它所有可能的分词结果,再根据语言模型,得到每种分词结果下的句子成立的概率,取所有概率中最大的两种情况,若这两个概率大小相差不大,说明这两种分词结果都有可能成立。则可简单认为此句有交集型歧义。
3.代码实现
3.1 获得所有可能的分词结果
#采用递归的形式实现,借鉴而来,还未深究
def text_count(text, word, dict):
if len(word) == 0:
all_split.append(text)
# print('/'.join(text))
return 1
count = 0
for i in range(1, len(word) + 1):
if word[:i] not in dict:
continue
count += text_count(text + [word[:i]], word[i:], dict)
return count
3.2 由原始语料得到词库
word2frequency = {
}
pattern = re.compile(r'[/|a-z|A-Z]')#删除 / 、a-z、A-Z 字符
with open(path_corpus, 'r', encoding='utf-8') as f:
all_content = f.readlines