预测名称是作者字符串的姓名还是姓氏(词法分析)

时间:2015-12-30 12:00:52

标签: perl machine-learning lexical-analysis

我正在编写一个解析器,它将凌乱的作者字符串转换为格式整齐的字符串,格式如下:^([A-Z]\. )+[[:surname:]]$。以下是一些例子:

  • Smith JS => J. S.史密斯
  • John Smith => J.史密斯
  • John S Smith => J. S.史密斯
  • J S Smith => J. S.史密斯

我已经设法使用各种正则表达式来覆盖其中的大多数,但是对于以未知顺序提供全名的情况,我已经遇到了障碍。例如:

  • 史密斯约翰
  • John Smith
  • Smith John Stone

显然,正则表达式无法辨别出姓,姓和中间名的顺序,所以我的想法是对作者字符串进行词法分析,为每个字符串返回一个类型和置信度分数令牌。有没有人以前编写过这样的解决方案,最好是在Perl?如果是这样,我想我的代码看起来像这样:

use strict;
use warnings;
use UnknownModule::NamePredictor qw( predict_name );

my $messy_author = "Smith John Stone";
my @names = split(' ',$messy_author);
for my $name (@names){
    my ($type,$confidence) = predict_name($name);
}

我看到一篇文章here解释了我遇到的问题,但没有提出可行的解决方案。如果没有人在我说实话之前编写过这样的解决方案,我会感到非常惊讶,因为有大量的训练集可用。如果还没有完成,我可以自己走这条路。

需要考虑的其他事项:

  • 我不需要这个是完美的。我正在寻找精度> 90%的理想选择。
  • 我有> 100,000个凌乱的作者字符串。我的目标是尽可能多地通过,随着时间的推移评估和改进方法。
  • 这些绝对是作者的字符串,但是它们以许多不同的格式混在一起,因此我自己设定了挑战。
  • 对于每个试图指出名称不一定可能分类的人。简而言之,是的当然会有这些情况,因此我为什么要追求不完美的精度。但是,大多数人可以非常舒适地归类。我之所以知道这一点,仅仅是因为我的人类大脑具有所有聪明的模式识别能力,这使我能够做得很好。

更新:在没有现有解决方案的情况下,我一直在寻求使用LIBSVM从支持向量机创建模型。我应该能够使用来自PubMed的名字和姓氏来构建一个大而准确的训练和测试数据集,其中包含一个包含分类名称的大于25M的文章库。不幸的是,这些没有中间名,只是首字母。

0 个答案:

没有答案