5

我是 NLP 领域的新手,但我目前的研究需要从 URL 地址中进行一些文本解析(或称为关键字提取),例如假 URL,

http://ads.goole.com/appid/heads

我的解析有两个约束,

  1. 第一个“ads”和最后一个“heads”应该是不同的,因为“heads”中的“ads”意味着更多的后缀而不是广告。

  2. “appid”可以解析成两部分;即“app”和“id”,在互联网上都具有语义含义。

我试过斯坦福 NLP工具包和谷歌搜索引擎。前者试图将每个单词按我预期的语法含义进行分类。谷歌引擎对“appid”表现出更多的聪明,这给了我关于“app id”的建议。

我无法查看谷歌搜索中搜索历史的参考,因此它给了我“app id”,因为有很多人搜索过这些词。我可以得到一些离线方法来执行类似的解析吗?


更新:

请跳过正则表达式建议,因为即使是简单的 URL,也可能包含未知数量的单词组合,例如“appid”。

谢谢,

贾敏

4

2 回答 2

8

听起来您真正想做的不是标记化,而是分词。例如,这是一种理解没有空格的句子的方法。

我还没有完成整个教程,但这应该可以帮助您入门。他们甚至将 url 作为一个潜在的用例。

http://jeremykun.com/2012/01/15/word-segmentation/

于 2013-12-20T03:53:01.687 回答
2

Python wordsegment 模块可以做到这一点。它是一个 Apache2 许可的英语分词模块,用纯 Python 编写,基于万亿字语料库。

基于 Peter Norvig 在“Beautiful Data”一书中的“自然语言语料库数据”一章中的代码(Segaran 和 Hammerbacher,2009 年)。

数据文件来自 Google Web Trillion Word Corpus,如 Thorsten Brants 和 Alex Franz 所述,由语言数据联盟分发。该模块仅包含该数据的一个子集。一元数据仅包括最常见的 333,000 个单词。同样,二元组数据仅包括最常见的 250,000 个短语。每个单词和短语都小写并删除了标点符号。

安装很容易pip

$ pip install wordsegment

只需调用segment以获取单词列表:

>>> import wordsegment as ws
>>> ws.segment('http://ads.goole.com/appid/heads')
['http', 'ads', 'goole', 'com', 'appid', 'heads']

正如您所注意到的,旧语料库的“app id”排名并不高。没关系。我们可以很容易地教它。只需将其添加到bigram_counts字典中。

>>> ws.bigram_counts['app id'] = 10.2e6
>>> ws.segment('http://ads.goole.com/appid/heads')
['http', 'ads', 'goole', 'com', 'app', 'id', 'heads']

10.2e6通过 Google 搜索“app id”并记下结果数来选择该值。

于 2015-09-02T23:05:10.333 回答