【问题标题】:A general solution for dealing with abbreviations处理缩写的通用解决方案
【发布时间】:2023-03-28 07:36:01
【问题描述】:

有问题?

给定输入语句:
Hello, Mr. Anderson.

默认的句子标记器(punkt 和 nltk 示例 pickle)将其转换为:
第一句:Hello, Mr
第二句:Anderson

当它真的应该保持原样时。

为什么很难找到现有的解决方案?

有没有通用的解决方案?这似乎是一个常见问题,甚至在 nltk python 教程书中也提到过。

Sentence segmentation is difficult because period is used to mark abbreviations, and some periods simultaneously mark an abbreviation and terminate a sentence, as often happens with acronyms like U.S.A.

然而,我见过的所有解决方案要么基于手动输入缩写,例如this one;要么或训练一个新的泡菜 - 因为我的搜索不会出现其他人训练过的搜索(句子边界消歧的第一条规则......)。

手动构建英文缩写列表是一项艰巨的任务;而且我还没有在 nltk 中找到任何关于此类列表的明确文档。

我目前的做法:我正在尝试编写一个网络爬虫来使用this 列表。我讨厌它。该列表远未完成,我真正希望的是扩展网络爬虫以组合几个这样的列表。然后,我将使用该列表来形成假设的缩写扩展,看看它们是否有意义……我在开玩笑吗?我可能会回去睡觉了。

【问题讨论】:

  • 这是nltk标签中的一个常见问题:“我有一个通用的统计工具,但它会出错。包括一些我觉得很明显的情况。我该怎么办?”答:首先评估(衡量)您拥有的工具。真的有问题吗?不要被一个荒谬的失败吓倒。如果性能低得无法接受:选择更好的工具(并非总是可能),构建或训练更好的工具(困难),或对现有工具的结果进行预处理或后处理。同样,通过评估结果的表现来选择。

标签: python nltk


【解决方案1】:

您可以采取反动的、排他性的策略:任何至少有两个字母且不是合法单词的内容,后跟句点,必须是缩写。您的文本语料库会允许这样做吗?缺点是拼写错误、其他拼写错误、无故使用 SMS、俚语或其他未被“官方”认可的词语,以及缩写也是合法词语(例如“Ed. note”)的情况。

如果您想要一个全面的解决方案……那么,机器学习模型在您的应用程序中是否有用?喂它例子,让它学习“时代服装”中的哪些项目[是|不是]缩写,并将其合并到您选择的句子切片器中。

【讨论】:

  • 您在猜测重新发明一个著名的轮子。 punkt 分词器(nltk 附带)使用无监督学习算法来检测句子边界,而有监督的方法是一毛钱。
  • "任何至少是两个字母且不是合法单词,后跟一个句点,必须是缩写" 除了你提到的缺点之外,上面Hello, Mr. Anderson.中的Anderson不是缩写.
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多