【问题标题】:Determining geo location by arbitrary body of text通过任意文本体确定地理位置
【发布时间】:2013-06-27 12:10:17
【问题描述】:

我正在从事一个我不确定如何处理的项目。问题可以总结如下:

  • 给定任意正文(有点像报告),确定报告的每个部分所指的地理位置。

地理位置范围从州到县(都在美国境内),因此它们的数量有限,但每份报告通常都包含对多个位置的引用。例如,报告的前 5 段可能是关于整个州的,然后接下来的 5 段可能是关于该州内的各个县,或类似的内容。

我很好奇解决此类问题的最佳方法是什么,也许有关于 NLP 或 ML 框架(Python 或 Java)的具体建议?

【问题讨论】:

  • 你能提供一个输入和预期输出的例子吗?

标签: machine-learning nlp


【解决方案1】:

我实际上可以在这里提供一点帮助(我的研究领域是地名解析)。

如果我的理解正确,您正在寻找一种方法来 (1) 在文本中找到地名,(2) 消除地名的地理参考歧义,以及 (3) 对整个句子或段落进行空间定位。

有很多开源软件包可以做到 #1。 Stanford Core NLP, OpenNLP

有几个包可以做#1 和#2。 CLAVIN 可能是目前唯一可以使用的开源应用程序。 Yahoo Placemaker 花钱但可以做到。

真的没有一个包可以做到#3。有一个名为TEXTGROUNDER 的较新项目正在执行名为“文档地理位置”的操作,但是虽然代码可用,但它并未设置为在您自己的输入文本上运行。我只建议您在渴望开始或为尝试做此类事情的项目做出贡献时查看它。

这三个任务仍然是正在进行的研究的一部分,并且可能会变得非常复杂,具体取决于源文本的细节。您没有提供有关您的文本的详细信息,但希望这些信息可以帮助您。

【讨论】:

  • 非常感谢您的建议!
  • 您介意通过 mev.com 的 alex 与我联系以进一步讨论吗?
【解决方案2】:

老问题,但其他人可能知道 Apache OpenNLP 有一个名为 GeoEntityLinker 的插件并获取文档文本和句子,提取实体(地名),在 USGS 和 GeoNames gazateers(Lucene 索引)上执行查找,解析(或至少尝试)以多种方式访问​​ topopnymns,并返回与传入的文档中的每个句子相关的评分 gazateer 条目。如果一切顺利,它将与 OpenNLP 1.6 一起发布......如果没有太多文档任何在这一点上。

这是 OpenNLP Jira 中的票证: https://issues.apache.org/jira/i#browse/OPENNLP-579.

这是源代码:

http://svn.apache.org/viewvc/opennlp/addons/geoentitylinker-addon/

仅供参考:我是主要的提交者。

【讨论】:

  • 您能详细说明一下吗?我正在做一个可以从这个工具中受益的项目。
【解决方案3】:

使用 OpenNLP 或 GATE 等来识别提及的地理位置是相当简单的。主要的问题出现在之后,当您必须消除同名地点的歧义时。例如,在美国有 29 个地方命名为“布里斯托尔”。哪个是正确的?

您可以使用多种方法来消除歧义。一个简单的方法是收集文本中提到的所有位置的列表,获取它们的潜在经度/纬度,然后找到距离总和最小的集合。

我看到人们部署的一个更好的解决方案是从 Wikipedia 获取所有提及地点的文章,将它们放入数据库中以获取 Lucene 等文本,然后使用您的文本作为查询,通过测量找到候选人之间最有希望的位置一些相似度得分。这个想法是,在文章中除了“布里斯托尔”这个词之外,还会提到河流名称、人或类似的东西。

【讨论】:

  • 另外,地图阅读和阅读地图与人类有很大不同(无论如何在英国)......
【解决方案4】:

为了完成任务,您需要一个带标签的训练集。然后,您在该训练集上训练一个分类模型,并根据该模型预测新文本的位置。 你可以在这个基于 SCIKIT-LEARN 的示例代码中看到它们是如何协同工作的:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

标记的训练集:

您可以在训练集上训练分类器,其中训练中的每个样本都是(段落,region_id)。 region_id 可以是国家、地区或城市的 id。

训练分类模型:

您为每个样本构建一个词袋(例如 unigrams)模型,并在标记的训练集上训练一个分类器(例如带有 L1 正则化的逻辑回归)。您可以使用任何工具,但我建议在 Python 中使用 SCIKIT-LEARN,它使用起来非常简单高效。

预测:

训练后,给定一个段落或一段文本,训练后的模型能够根据样本中使用的单词为其找到一个 region_id。

记得在开发集上调整正则化参数以获得良好的结果(以防止过度拟合训练样本)。

阅读my paperthis one 使用文本进行地理定位: http://www.aclweb.org/anthology/N15-1153

和相应的海报: http://www.slideshare.net/AfshinRahimi2/geolocation-twittertextnetwork-48968497

我还编写了名为 Pigeoa tool,它完全可以做到这一点,并附带一个预训练模型。 除了这些作品之外,您还可以找到许多其他关于基于文本的地理定位的研究论文。

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多