中文地址清洗

中文分词的基本原则

  • 颗粒度越大越好

分词结果的颗粒度越大(即单词的字数越多),所能表示的含义越确切。如:“公安局长”可以分为“公安 局长”、“公安局 长”、“公安局长”,但是要用于语义分析,则“公安局长”的分词结果最好(前提是所使用的词典中有这个词)。

  • 切分结果中非词典词越少越好,单字词典词数越少越好
    • 非词典词:不包含在词典中的单字
    • 单字词典词:可以独立运用的单字,如:的、了、和、你、我、他

如:“技术和服务”,可以分为“技术 和服 务”以及“技术 和 服务”。“务”字无法独立成词(即词典中没有),但“和”字可以单独成词(词典中要包含),因此“技术 和服 务”有1个非词典词,而“技术 和 服务”有0个非词典词,因此选用后者。

  • 总体词数越少越好

在相同字数的情况下,总词数越少,说明语义单元越少,那么相对的单个语义单元的权重会越大,因此准确性会越高。

匹配算法

最大匹配算法

最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。例如:词典中最长词为“中华人民共和国”共7个汉字,则最大匹配起始字数为7个汉字。然后逐字递减,在对应的词典中进行查找。

正向最大匹配算法

以“我们在野生动物园”为例,词典中最长词为“中华人民共和国”。

正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。

第1轮第1次:7字词典中扫描“我们在野生动物”,无;

第1轮第2次:6字词典中扫描“我们在野生动”,无;

第1轮第3次:5字词典中扫描“我们在野生”,无;

第1轮第4次:4字词典中扫描“我们在野”,无;

第1轮第5次:3字词典中扫描“我们在”,无;

第1轮第6次:2字词典中扫描“我们”,有;

扫描中止,输出第1个词为“我们”,去除第1个词后开始第2轮扫描。

第2轮第1次:7字词典中扫描“在野生动物园玩”,无;

第2轮第2次:6字词典中扫描“在野生动物园”,无;

第2轮第3次:5字词典中扫描“在野生动物”,无;

第2轮第4次:4字词典中扫描“在野生动”,无;

第2轮第5次:3字词典中扫描“在野生”,无;

第2轮第6次:2字词典中扫描“在野”,有;

扫描中止,输出第2个词为“在野”,去除第2个词后开始第3轮扫描。

第3轮第1次:5字词典中扫描“生动物园玩”,无;

第3轮第2次:4字词典中扫描“生动物园”,无;

第3轮第3次:3字词典中扫描“生动物”,无;

第3轮第4次:2字词典中扫描“生动”,有;

扫描中止,输出第3个词为“生动”,去除第3个词后开始第4轮扫描。

第4轮第1次:3字词典中扫描“物园玩”,无;

第4轮第2次:2字词典中扫描“物园”,无;

第4轮第3次:1字词典中扫描“物”,无;

扫描中止,输出第4个词为“物”,非词典词数加1,去除第4个词后开始第5轮扫描。

第5轮第1次:2字词典中扫描“园玩”,无;

第5轮第2次:1字词典中扫描“园”,有;

扫描中止,输出第5个词为“园”,单字词典词数加1,去除第5个词后开始第6轮扫描。

第6轮第1次:1字词典中扫描“玩”,有;

扫描中止,输出第6个词为“园”,单字词典词数加1,扫描结束。

最终切分结果为:“我们/在野/生动/物/园/玩”,其中,单字词典词数为2,非词典词数为1。

逆向最大匹配算法

以“我们在野生动物园”为例,词典中最长词为“中华人民共和国”。

逆向即从后往前取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。

第1轮第1次:7字词典中扫描“在野生动物园玩”,无;

第1轮第2次:6字词典中扫描“野生动物园玩”,无;

第1轮第3次:5字词典中扫描“生动物园玩”,无;

第1轮第4次:4字词典中扫描“动物园玩”,无;

第1轮第5次:3字词典中扫描“物园玩”,无;

第1轮第6次:2字词典中扫描“园玩”,无;

第1轮第7次:1字词典中扫描“玩”,有;

扫描中止,输出第1个词为“玩”,单字词典词数加1,去除第1个词后开始第2轮扫描。

第2轮第1次:7字词典中扫描“们在野生动物园”,无;

第2轮第2次:6字词典中扫描“在野生动物园”,无;

第2轮第3次:5字词典中扫描“野生动物园”,有;

扫描中止,输出第2个词为“动物”,去除第2个词后开始第3轮扫描。

第3轮第1次:3字词典中扫描“我们在”,无;

第3轮第2次:2字词典中扫描“们在”,无;

第3轮第3次:1字词典中扫描“在”,有;

扫描中止,输出第3个词为“玩”,单字词典词数加1,去除第3个词后开始第4轮扫描。

第4轮第1次:2字词典中扫描“我们”,有;

扫描中止,输出第4个词为“我们”,扫描结束。

最终切分结果为:“我们/在/野生动物园/玩”,其中,单字词典词数为2,非词典词数为0。

双向最大匹配算法

正向、逆向两种算法都切一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,选取其中一种分词结果输出。

  • 非词典词数:越少越好
  • 单字词典词数:越少越好
  • 总词数:越少越好