首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python智能解析具有组织信息的人员列表

用Python智能解析具有组织信息的人员列表
EN

Stack Overflow用户
提问于 2013-02-22 22:26:18
回答 3查看 163关注 0票数 1

假设我有以下格式的明文:

John Doe,Suzy Q,Sue N. Sough和Michael Blanks,英国奇才大学 无名氏,普通地点,葡萄牙和苏西Q,另一个地方,法国 John和Suzy Q,第三地点,德国 约翰·多伊( John Doe )、苏西·Q( Suzy Q)和道格·Z·道格( Doug Z Doug ),第四地点,波兰和西蒙·Pft,第五地点,韩国

正确分析后,数据应该会读到如下内容:

代码语言:javascript
复制
[{
    '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,另一个地方,法国

可能会被解析:

代码语言:javascript
复制
[{
    '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 ),花费的时间比我编写一个智能的解析器所花费的时间要少。我是从一个贝叶斯分类器开始的,它很好地区分了人的名字和组织,但是它仍然经常错误地识别其中一个,以至于它不会对我的目的起作用。

EN

回答 3

Stack Overflow用户

发布于 2013-02-22 22:38:05

如果国家总是排在最后,而组织是前一个元素,那么您可以将其他人视为名称,也可以通过拆分‘和’&‘来轻松地编写一些代码。

票数 0
EN

Stack Overflow用户

发布于 2013-02-22 23:01:05

我认为沙珊走在正确的轨道上。国家名称定义了一个单元的结束。最后一个令牌(用',‘分隔开)是公司名称,其余的令牌都是名称。

如果在同一个国家有两个人公司的元组,就会打破这种情况,如:

无名氏,普通地方,苏西·Q,另一个地方,法国

此外,如果在您的文本中有逗号是公司名称的一部分。引号可以用来保护这些。

票数 0
EN

Stack Overflow用户

发布于 2013-02-23 00:04:09

代码语言:javascript
复制
l=Line.split(",")
Row = {
    "Org": l[-2],
    "Ctry": l[-1],
    "Authors": l[:-2]
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15034248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档