7

我正在对人员数据库进行重复数据删除。对于第一遍,我遵循基本的两步过程,以避免对整个数据库进行 O(n^2) 操作,如文献中所述。首先,我“阻塞”——遍历整个数据集,并根据名称中存在的 n-gram 和首字母对每条记录进行分类。其次,使用 Jaro-Winkler 比较每个 bin 的所有记录,以衡量它们代表同一个人的可能性。

我的问题 - 名称是 Unicode。其中一些(尽管不多)名称是 CJK(中日韩)语言。我不知道如何为这些语言中的首字母之类的东西找到单词边界。我不知道 n-gram 分析是否对名称可以是 2 个字符的语言中的名称有效。我也不知道字符串编辑距离或其他相似性指标在这种情况下是否有效。

语言程序员或母语人士有什么想法吗?

4

3 回答 3

10
于 2012-04-09T08:49:01.857 回答
2

对于中国人来说,大多数名字由三个字符组成:第一个字符是姓(!),其他两个字符是人名,例如
毛泽东=姓毛和个人姓名泽东。还有一些2字的名字,第一个字是姓,第二个字是人名。4 个字符的名称很少见,但通常拆分为 2-2。

看到这里,对中文名字进行 n-gram 分析并没有多大意义——你只是在研究什么是最常见的中文姓氏/人名。

于 2012-04-06T12:19:35.353 回答
1

因此,进行双元样式匹配是在日语中进行搜索的常见技巧,但是您可以使用更好的方法来确定单词边界。在我过去参与的一个项目中,我们使用mecab获得了相当好的结果,用于日本品牌名称和其他一些文本。我想你可以通过在日本名字列表上训练它来获得更好的性能。遗憾的是它在 C 中,但我们最终还是通过 JNI 在 Java 中使用了它,你可以在你的 python 代码中做类似的事情。

于 2012-04-05T21:44:33.493 回答