从自由文本中提取位置的推荐方法有哪些?
我能想到的是使用“单词......在位置”等正则表达式规则。但是有更好的方法吗?
此外,我可以考虑使用包含国家和城市名称的查找哈希表表,然后将文本中每个提取的标记与哈希表的标记进行比较。
有人知道更好的方法吗?
编辑:我正在尝试从推文文本中提取位置。因此,大量推文的问题也可能影响我对方法的选择。
答案 0 :(得分:11)
所有基于规则的方法都将失败(如果您的文本真的“免费”)。这包括正则表达式,无上下文语法,任何类型的查找...相信我,我以前去过那里: - )
此问题称为命名实体识别。位置是3个研究最多的课程之一(有人和组织)。 Stanford NLP有一个非常强大的开源Java实现:http://nlp.stanford.edu/software/CRF-NER.shtml
您可以轻松找到其他编程语言的实现。
答案 1 :(得分:1)
将所有有效位置放入已排序的列表中。如果您计划比较不区分大小写,请确保列表的大小写已经标准化。
然后,您只需循环输入文本中的各个“单词”,并在每个新单词的开头,在您的位置列表中开始新的二进制搜索。一旦找到不匹配项,您就可以跳过整个单词并继续下一个单词。
可能存在的问题:多字词位置,如“纽约”,“第三街”,“中华人民共和国”。但是,如果您发现您的bsearch引导您(可能!)多字结果,则可能只需保存第一个新单词的位置即可。然后,如果完整的比较失败 - 可能在以后的几个单词 - 你所要做的就是恢复到这个'下一个'单词,相对于你开始的前一个单词。
关于“单词”是什么:在准备位置列表时,列出可能出现在位置内的所有字符。只有包含此列表中字符的短语才能被视为有效的“单词”。
答案 2 :(得分:0)
推文进入的速度有多快?就像是完整的Twitter消防软管或一些过滤查询? 更复杂的方法,类似于您所描述的使用集成到地名词典的NLP工具。 很少有NLP工具可以跟上Twitter的速度,而很少有人能够很好地使用Twitter,因为所有的leet说话。 NLP可以根据您的需要进行精确调整或召回,以限制在地名词典中执行锁定。 我建议通过亚马逊AWS查看Rosoka(Rosoka Cloud)和GeoGravy