【问题标题】:English word segmentation in NLP?NLP中的英语分词?
【发布时间】:2014-01-08 20:31:55
【问题描述】:

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

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

我的解析有两个约束,

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

  2. “appid”可以解析成两部分;也就是‘app’和‘id’,都是在互联网上的语义含义。

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

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


更新:

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

谢谢,

贾敏

【问题讨论】:

    标签: web nlp text-segmentation


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经完成了教程,发现给定的语料库(来自书本)不能很好地与 Internet url(例如 appid)配合使用。但这是一个很好的起点。因此,我将搜索除了提到的非免费 google-2006 数据之外的其他免费语料库。谢谢。
    【解决方案2】:

    Python wordsegment module 可以做到这一点。它是一个 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']
    

    我通过在 Google 上搜索“app id”并记下结果数量来选择值 10.2e6

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2014-09-07
    • 2018-01-13
    • 2018-11-07
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多