问题?
给定输入语句:
Hello, Mr. Anderson.
默认句子标记器(punkt和nltk样本泡菜)将其转换为:
句子1:Hello, Mr
句子2: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.
但是,我看到的所有解决方案都是基于手动输入的缩写,例如本缩写;或训练新的泡菜-因为我的搜索不会发现其他人已经训练过的内容(句子边界消除歧义的第一条规则...)。
手动建立英文缩写列表是一项艰巨的任务。而且我还没有在nltk中找到任何有关此类列表的明确文档。
我目前的方法:我正在尝试编写一个网络爬虫以使用此列表。我讨厌它。该列表还远远不够完整,我真正希望的是扩展webscraper以便合并几个这样的列表。然后,我将使用该列表形成假设的缩写扩展,并查看它们是否有意义……我在跟谁开玩笑?我可能会回去睡觉。
这是nltk标记中的一个常见问题:"我有一个通用的统计工具,但会出错。包括一些对我来说显而易见的情况。我该怎么办?" 答:首先评估(衡量)您拥有的工具。 真的有问题吗? 不要因一次荒谬的失败而推迟。 如果性能低到无法接受的程度:选择一个更好的工具(并非总是可行),构建或训练一个更好的工具(困难),或对您拥有的结果进行预处理或后处理。 同样,通过评估结果的性能进行选择。
您可以采取反动,排他的方法:至少两个字母而不是一个合法单词,后跟一个句号的任何东西都必须是缩写。 您的文字语料库允许吗? 缺点是拼写错误,其他拼写错误,随意使用SMS,lang语或其他未"正式"识别的单词,以及缩写也是合法单词的情况(例如" Ed。note")。
如果您想要一个全面的解决方案……那么,机器学习模型在您的应用程序中会有用吗? 提供示例,让它了解"定期服装"中的哪些项目[ 不是缩写词,并将其合并到您选择的句子切片器中。
您在猜测一个著名车轮的重塑。 punkt标记器(随nltk一起提供)使用一种无监督的学习算法来检测句子边界,而有监督的方法大约是一打钱。
"至少两个字母且不是合法单词的任何字符,后跟一个句号,都必须是缩写"。除了您提到的缺点之外,上述Hello, Mr. Anderson.中的Anderson也不是缩写。