我正在寻找一种算法或方法,可帮助识别具有特定方言的文本语料库中的一般短语(它来自特定领域,但我的情况是英语方言) - 例如以下片段可以来自与“世界”或“魔兽争霸”相关的更大的语料库,也可能来自MMORPH。
玩家在第三人称或第一人称视角中控制游戏世界中的角色化身,探索风景,与各种怪物作战,完成任务,以及与非玩家角色(NPC)或其他玩家互动。与其他MMORPG类似,“魔兽世界”要求玩家支付订阅费用,或者购买预付游戏卡以获得一定数量的游戏时间,或者使用信用卡或借记卡定期付款
作为上述输出,我想确定以下一般短语:
答案 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。