我正在编写一个解析器,它将凌乱的作者字符串转换为格式整齐的字符串,格式如下:^([A-Z]\. )+[[:surname:]]$
。以下是一些例子:
我已经设法使用各种正则表达式来覆盖其中的大多数,但是对于以未知顺序提供全名的情况,我已经遇到了障碍。例如:
显然,正则表达式无法辨别出姓,姓和中间名的顺序,所以我的想法是对作者字符串进行词法分析,为每个字符串返回一个类型和置信度分数令牌。有没有人以前编写过这样的解决方案,最好是在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解释了我遇到的问题,但没有提出可行的解决方案。如果没有人在我说实话之前编写过这样的解决方案,我会感到非常惊讶,因为有大量的训练集可用。如果还没有完成,我可以自己走这条路。
需要考虑的其他事项:
更新:在没有现有解决方案的情况下,我一直在寻求使用LIBSVM从支持向量机创建模型。我应该能够使用来自PubMed的名字和姓氏来构建一个大而准确的训练和测试数据集,其中包含一个包含分类名称的大于25M的文章库。不幸的是,这些没有中间名,只是首字母。