Python-如何使用NLP从缩写文本中直觉单词?
machine-learning
nlp
python
5
0

我最近正在处理一个使用各种单词的缩写的数据集。例如,

wtrbtl = water bottle
bwlingbl = bowling ball
bsktball = basketball

在使用的约定方面似乎没有任何一致性,即有时他们有时使用元音。我正在尝试为上述缩写词及其对应的词构建一个映射对象,而没有完整的语料库或完整的术语列表(即,可能引入未明确知道的缩写词)。为了简单起见,说它仅限于您在健身房找到的东西,但可以是任何东西。

基本上,如果仅查看示例的左侧,那么在将每个缩写与相应的全文标签相关联方面,什么样的模型可以与我们的大脑进行相同的处理。

我的想法一直停留在拿第一个和最后一个字母,然后在字典中找到它们。然后根据上下文分配先验概率。但是,由于有很多没有指示单词结尾的标记的语素,所以我看不出如何将它们分割。

更新:

我还想结合一些字符串度量算法(例如匹配评级算法)来确定一组相关术语,然后计算该集合中每个单词到目标缩写之间的Levenshtein距离。但是,对于不在主词典中的单词的缩写,我还是一无所知。基本上,推断单词的构造-可能会使用朴素贝叶斯模型可能会有所帮助,但我担心由于使用上述算法而导致的精度误差将使任何模型训练过程无效。

感谢您提供任何帮助,因为我真的很喜欢这个。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

因此,我研究了类似的问题,并遇到了一个名为PyEnchant的出色软件包。如果您使用内置的拼写检查器,则可以得到单词建议,这将是一个很好且简单的解决方案。 但是,它仅会建议一个单词(据我所知),因此您遇到的情况是:

wtrbtl = water bottle

不管用。

这是一些代码:

import enchant

wordDict = enchant.Dict("en_US")

inputWords = ['wtrbtl','bwlingbl','bsktball']
for word in inputWords:
    print wordDict.suggest(word)

输出为:

['rebuttal', 'tribute']
['bowling', 'blinding', 'blinking', 'bumbling', 'alienable', 'Nibelung']
['basketball', 'fastball', 'spitball', 'softball', 'executable', 'basketry']

也许,如果您知道哪种缩写,可以将字符串分成两个单词,例如

'wtrbtl' -> ['wtr', 'btl']

还有一个自然语言处理工具包( NLTK ),它很神奇,例如,您可以通过查看每个建议单词的普遍程度,将其与上面的代码结合使用。

祝好运!

收藏
评论

一种选择是回到过去并计算等效的Soundex算法

Soundex删除所有元音,处理常见的发音错误和拼写错误。该算法是简单的并且过去是手工完成的。缺点是没有特别的词干或停止工作支持。

收藏
评论

...不在主词典中的单词的缩写。

因此,您正在寻找一种NLP模型,该模型可以提供有效的英语单词,而以前没有看到它们吗?

找到更详尽的单词词典,或者将现有词典中的每个单词映射到常见的扩展名,例如+"es"word[:-1] + "ies" ,可能更容易。

收藏
评论

如果找不到详尽的字典,则可以构建(或下载)概率语言模型,以为您生成和评估候选句子。它可以是字符n元语法模型或神经网络。

对于您的缩写,您可以构建一个“噪声模型”来预测字符遗漏的可能性。它可以从语料库(您必须手动或半手动地标记)中得知,辅音的丢失频率比元音少。

具有复杂的语言模型和简单的噪声模型,您可以使用噪声通道方法将它们组合起来(例如参见Jurafsky的文章以获取更多详细信息),以建议候选句子。

更新 。我对这个问题充满热情并实现了该算法:

  • 语言模型(在“指环王”文字上训练过的5字字符)
  • 噪声模型(每个符号的概率缩写)
  • 波束搜索算法,用于候选短语建议。

我的解决方案在此Python笔记本中实现 。对于训练有素的模型,它具有类似于noisy_channel('bsktball', language_model, error_model)界面, noisy_channel('bsktball', language_model, error_model) ,该界面返回{'basket ball': 33.5, 'basket bally': 36.0} 。字典值是建议的分数(越低越好)。

在其他示例中,效果更糟:对于“ wtrbtl”,它返回{'water but all': 23.7, 'water but ill': 24.5, 'water but lay': 24.8, 'water but let': 26.0, 'water but lie': 25.9, 'water but look': 26.6}

对于“ bwlingbl”,它给出{'bwling belia': 32.3, 'bwling bell': 33.6, 'bwling below': 32.1, 'bwling belt': 32.5, 'bwling black': 31.4, 'bwling bling': 32.9, 'bwling blow': 32.7, 'bwling blue': 30.7} 。但是,当在适当的语料库(例如体育杂志和博客;可能带有名词的过度采样)上进行训练时,或者在波束搜索的宽度更大时,此模型将提供更多相关建议。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号