首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规范化包含错误分隔和连接的单词的文本

规范化包含错误分隔和连接的单词的文本
EN

Stack Overflow用户
提问于 2012-11-21 21:56:16
回答 2查看 60关注 0票数 1

假设我有一堆带有噪声的相似字符串,主要是错误连接/断开连接的单词。像这样:

代码语言:javascript
复制
 "Once more unto the breach, dear friends. Once more!"
 "Once more unto the breach , dearfriends. Once more!"
 "Once more unto the breach, de ar friends. Once more!"
 "Once more unto the breach, dear friends. Once more!"

我如何才能将每个人规范化到同一组单词中?即

代码语言:javascript
复制
 ["once" "more" "unto" "the" "breach" "dear" "friends" "once" "more"]

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-11-22 03:02:39

这里有几点建议。我认为您最终将不得不编写一组例程/函数来修复您遇到的所有各种类型的异常。

好消息是,您可以逐步添加到您的“修复”集,并不断改进解析器。

我不得不做一些类似的事情,我发现this post by Peter Norvig非常有用。(请注意,它是用Python编写的。)

这个函数特别具有您需要的思想:拆分、删除、转置和插入不规则的单词以“更正”它们。

代码语言:javascript
复制
def edits1(word):
   splits     = [(word[:i], word[i:]) for i in range(len(word) + 1)]
   deletes    = [a + b[1:] for a, b in splits if b]
   transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
   replaces   = [a + c + b[1:] for a, b in splits for c in alphabet if b]
   inserts    = [a + c + b     for a, b in splits for c in alphabet]
   return set(deletes + transposes + replaces + inserts)

上面是Norvig的spelling corrector中的一个片段

即使您不能按原样使用代码,其核心思想也适用于您的情况:您使用一个记号(" word "),这是您的情况中的不规则单词,尝试不同的调整,看看它是否属于已知和接受的单词的大字典。

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2012-11-23 04:41:20

这是一个有点疯狂的想法,我之所以提出这个想法,只是因为我在教授我这周要向学生提出的算法。

去掉句子中的所有空格,例如de ar friends变成dearfriends。存在一种二次时间、线性空间动态规划算法来将无空格字符串分割成最可能的单词序列。算法在herehere中讨论-第二个解决方案是我想要的。这里的假设是,你有一个很好的模型,什么是一个词,并且需要恒定的时间来查询该模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13494836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档