先通过分词等方式构建拼音到文字的字典,当需要将一段拼音转换成文字时,遍历字典中所有可能的情况,对这些情况分别打分,最后取得分较高的文字组合。
一、语料格式:
yang qiao da sha 洋桥大厦
shi sun yi cun 石笋一村
chang shu kai yue guo ji jiu dian 常熟凯悦国际酒店
chun an xian di yi ren min yi yuan 淳安县第一人民医院
wan yue cheng 万悦城
二、方案
构建拼音的字典
由于同音字的存在,我们需要为每个拼音构建一个字序列。同时为了构建词语的字之间的联系,我们可以通过分词工具将地名进行分词,将其中的词语和对应的拼音也写入词典中。最后再将整个地名和拼音写入词典中。在写入字典中的同时我们统计出每个词的词频。这样我们就构建了一个相对完整的拼音词典。
使用打分策略决定一个拼音串对应的文字
我们的方法是遍历拼音串对应的文字的所有组合,使用打分策略择优。
遍历所有的组合:从拼音串的第一个拼音开始,查看第一个拼音对应的文字,第一个拼音和第二个拼音对应的文字…一直到第一个拼音到最后一个拼音对应的文字。其中单个拼音或者拼音组合对应的文字很可能是一个组合,因此若是由两个拼音组成的一个词语,第一个拼音有m个对应的文字,第二个拼音有n个对应的文字,这两个拼音组成的拼音串对应了k个词,那么共有m*n+k个可能的组合。
打分:由于单个字的词频相对较高,因此如果我们仅仅使用词频作为打分的依据是非常不公平的。我们的打分策略是:
以下我们使用f(c)来表示c的词频,则
单个字W的分数=log(f(W))
词语V分数=len(V)*f(V)
一个组合的得分等于其中每个元素得分之和
通过这种策略得到每种组合的分数。我们可以取得分最高的作为拼音串对应的文字。
三、 一点改进
由于结巴分词对地名的分词效果不是很好,所以后续的改进方向我们从提高分词准确率来考虑。基于凝聚度和自由度的分词是一种发现新词的很好的模型,由于poi的分词比较特殊,采用凝聚度和自由度来衡量词语可能是一种很好的方式。以下是参考资料的链接和文件。
简介版:
http://zhanghonglun.cn/blog/project/%E5%9F%BA%E4%BA%8E%E5%87%9D%E8%81%9A%E5%BA%A6%E5%92%8C%E8%87%AA%E7%94%B1%E5%BA%A6%E7%9A%84%E9%9D%9E%E7%9B%91%E7%9D%A3%E8%AF%8D%E5%BA%93%E7%94%9F%E6%88%90/
详细版:
http://www.matrix67.com/blog/archives/5044