假设我有以下格式的明文:
John Doe,Suzy Q,Sue N. Sough和Michael Blanks,英国奇才大学 无名氏,普通地点,葡萄牙和苏西Q,另一个地方,法国 John和Suzy Q,第三地点,德国 约翰·多伊( John Doe )、苏西·Q( Suzy Q)和道格·Z·道格( Doug Z Doug ),第四地点,波兰和西蒙·Pft,第五地点,韩国
正确分析后,数据应该会读到如下内容:
[{
'organization': "Wizards University",
'country': "United Kingdom",
'authors': ["John Doe", "Suzy Q", "Sue N. Sough", "Michael Blanks"]
}]
[ {
'organization': "Normal Place",
'country': "Portugal",
'authors': ["John Doe"]
}, {
'organization': "Other Place",
'country': "France",
'authors': ["Suzie Q"]
} ]
[{
'organization': "Third Location",
'country': "Germany",
'authors': ["John Doe", "Suzy Q"]
}]
[ {
'organization': "Fourth Location",
'country': "Poland",
'authors': ["John Doe", "Suzy Q", "Doug Z. Doug"]
}, {
'organization': "Fifth Location",
'country': "Korea",
'authors': ["Simon Pft"]
} ]对于一个人来说,看这篇文章并正确地解析它是非常微不足道的,但是我想知道是否有一种方法来写一个脚本,当它看到一堆列在一起的名字时,它是否可以阅读和识别。我的意思是,从一个只查找逗号和and的愚蠢解析器开始,
John Doe,Suzy Q,Sue N. Sough和Michael Blanks,英国奇才大学
看起来就像
无名氏,普通地点,葡萄牙和苏西Q,另一个地方,法国
可能会被解析:
[{
'organization': "Suzy Q",
'country': "Sue N. Sough",
'authors': ["John Doe"]
} , {
'organization': "Wizards University",
'country': "United Kingdom",
'authors': ["Michael Blanks"]
}]关键和烦人的加法!
国家并不总是被给予(我知道!)特别是当它隐含在组织的名义中时。
所以有时候记录看起来是这样的:
John Doe,Suzy Q,Sue N. Sough和Michael Blanks,奇才大学 John Doe,葡萄牙大学和Suzy Q,其他地方,法国 John和Suzy Q,第三地点 约翰·多伊( John Doe )、苏西·Q( Suzy Q)和道格·Z·道格( Doug Z Doug ),波兰第四地点,韩国大学西蒙·Pft
因此,虽然我可能能够使用国名(它也是以非标准方式格式化的,例如韩国、韩国、大韩民国等),但它并不适用于所有的记录。
我最后做的是…
…正在使用我所知道的最聪明的模式识别工具--我。我只是用正则表达式搜索和替换来扫描文档,查找\s*(,|&|\band\b)\s*,如果是在名称之间,我用|替换它,如果是在名称组之间,则用;替换它。幸运的是,数据集足够小(总数还不到100 ),花费的时间比我编写一个智能的解析器所花费的时间要少。我是从一个贝叶斯分类器开始的,它很好地区分了人的名字和组织,但是它仍然经常错误地识别其中一个,以至于它不会对我的目的起作用。
发布于 2013-02-22 22:38:05
如果国家总是排在最后,而组织是前一个元素,那么您可以将其他人视为名称,也可以通过拆分‘和’&‘来轻松地编写一些代码。
发布于 2013-02-22 23:01:05
我认为沙珊走在正确的轨道上。国家名称定义了一个单元的结束。最后一个令牌(用',‘分隔开)是公司名称,其余的令牌都是名称。
如果在同一个国家有两个人公司的元组,就会打破这种情况,如:
无名氏,普通地方,苏西·Q,另一个地方,法国
此外,如果在您的文本中有逗号是公司名称的一部分。引号可以用来保护这些。
发布于 2013-02-23 00:04:09
l=Line.split(",")
Row = {
"Org": l[-2],
"Ctry": l[-1],
"Authors": l[:-2]
}https://stackoverflow.com/questions/15034248
复制相似问题