识别特定方言中的一般短语

时间:2013-09-09 00:36:49

标签: nlp nltk opennlp

我正在寻找一种算法或方法,可帮助识别具有特定方言的文本语料库中的一般短语(它来自特定领域,但我的情况是英语方言) - 例如以下片段可以来自与“世界”或“魔兽争霸”相关的更大的语料库,也可能来自MMORPH。

  

玩家在第三人称或第一人称视角中控制游戏世界中的角色化身,探索风景,与各种怪物作战,完成任务,以及与非玩家角色(NPC)或其他玩家互动。与其他MMORPG类似,“魔兽世界”要求玩家支付订阅费用,或者购买预付游戏卡以获得一定数量的游戏时间,或者使用信用卡或借记卡定期付款

作为上述输出,我想确定以下一般短语:

  1. 第一个人
  2. 魔兽世界
  3. 预付游戏卡
  4. 借记卡
  5. 注意:

    1. 之前的问题类似于我的herehere,但为了澄清,我的有以下不同之处:

      一个。我正在尝试使用现有的工具包,如NLTK,OpenNLP等。

      湾我对判断句子中的其他词类不感兴趣

      ℃。我可以使用人工干预,其中算法将识别的名词短语呈现给人类专家,然后人类专家可以确认或拒绝调查结果,但是我们没有资源来训练手工注释数据上的语言模型

      < / LI>

2 个答案:

答案 0 :(得分:1)

Nltk已经内置了部分语音标记,已经证明它非常适合识别未知单词。也就是说,你似乎误解了一个名词是什么,你应该巩固你对这两个词性和你的问题的理解。

例如,first person首先是一个形容词。您可以自动假设关联的形容词是该短语的一部分。

或者,如果你想要识别一般短语,我的建议是实现一个简单的马尔可夫链模型,然后寻找特别高的转移概率。

如果您正在寻找Python中的马尔可夫链实现,我会指出您在当天写回的这个要点:https://gist.github.com/Slater-Victoroff/6227656

如果你想要比这更先进,你将很快进入学位论文领域。我希望有所帮助。

P.S。 Nltk包含大量预先注释的语料库,可能适用于您的目的。

答案 1 :(得分:1)

看来你正试图做名词短语提取。 TextBlob Python库包含两个开箱即用的名词短语提取实现。

最简单的入门方法是使用基于Shlomi Babluki所述算法here的默认FastNPExtractor

from text.blob import TextBlob

text = '''
players control a character avatar within a game world in third person or first
person view, exploring the landscape, fighting various monsters, completing quests,
and interacting with non-player characters (NPCs) or other players. Also similar
to other MMORPGs, World of Warcraft requires the player to pay for a
subscription, either by buying prepaid game cards for a selected amount of
playing time, or by using a credit or debit card to pay on a regular basis
'''

blob = TextBlob(text)
print(blob.noun_phrases)  # ['players control', 'character avatar' ...]

换掉其他实现(基于NLTK的chunker)非常简单。

from text.np_extractors import ConllExtractor

blob = TextBlob(text, np_extractor=ConllExtractor())

print(blob.noun_phrases)  # ['character avatar', 'game world' ...]

如果这些都不够,您可以创建自己的名词短语提取器类。我建议查看TextBlob np_extractor module source示例。要更好地理解名词短语分块,请查看NLTK book, Chapter 7