主要内容

创建自定义拼写校正函数使用编辑距离搜索者

这个例子展示了如何使用编辑距离搜索正确的拼写和已知的词汇。

词元化与normalizeWordsword2vec需要正确地拼写单词。轻松正确的拼写单词文本,使用用语函数。学习如何从头开始创建一个拼写校正函数使用编辑距离搜索,使用这个例子作为参考。

如果你有拼错的单词在文本的集合,那么你可以使用编辑距离搜索来找到最近的给定词汇拼写正确的单词。纠正拼写错误的单词的拼写在文档中,用最近的邻居的词汇。利用编辑距离搜索者找到最近的正确拼写单词拼错的单词根据编辑距离。例如,邻字形互换和字形插入,删除和替换。

加载数据

创建一个已知的词汇。下载并提取面向拼写检查的单词列表(皱眉)https://sourceforge.net/projects/wordlist/到一个文件夹在currrent目录中。导入单词下载数据使用支持功能万博1manbetxscowlWordList

folderName =“scowl-2019.10.06”;最大尺寸= 60;词汇= scowlWordList (folderName,“英语”,最大尺寸);

视图的字数在词汇表中。

numWords =元素个数(词汇)
numWords = 98213

创建简单的拼写校正器

使用导入的词汇表,创建一个编辑距离搜索者的最大距离2。更好的结果,允许相邻字母互换通过设置“SwapCost”选项1。对于大型词汇表,这可能需要几分钟。

maxDist = 2;eds = editDistanceSearcher(词汇、maxDist、“SwapCost”1);

这个编辑距离搜索是大小写敏感的这意味着改变字符的情况下导致了编辑距离。例如,搜索者可以找到你的邻居“测试”这个词“tseting”,因为它有编辑距离1(一个交换),而不是“tseting”这个词,因为它的编辑距离6。

正确的拼写

正确的拼错的单词拼写的数组标记化的文档通过选择拼错的单词和编辑距离搜索者找到最近的邻居。

创建一个标记化的文档对象包含拼写错误和拼写错误。

str =“与拼写错误和averyunusualword dccoument范例。”;文档= tokenizedDocument (str)
文档= tokenizedDocument: 8令牌:范例dccoument拼写错误和averyunusualword。

将文档转换成字符串数组的单词使用字符串函数。

话说=字符串(文档)
话说=1×8字符串“例子”“一个dccoument”与““错误”“和““averyunusualword”“。”

找到单词,需要修正。忽视单词拼写正确,找到单词的指数已经在词汇表中。忽略标点符号和复杂的令牌,如电子邮件地址,找到单词的指数没有令牌类型的“字母”或“其他”。获得令牌从文档中使用的细节tokenDetails函数。

tdetails = tokenDetails(文档);idxVocabularyWords = ismember (tdetails.Token eds.Vocabulary);idxComplexTokens =tdetails。类型~ =“字母”&tdetails。类型~ =“其他”;idxWordsToCheck =~ idxVocabularyWords &~ idxComplexTokens
idxWordsToCheck =8×1逻辑数组1 1 1 0 0 0 1 0

找到单词和视图的数字指标对应的单词。

idxWordsToCheck =找到(idxWordsToCheck)
idxWordsToCheck =4×11 2 3 7
wordsToCheck =单词(idxWordsToCheck)
wordsToCheck =1×4弦“一个”“例子”“dccoument”“averyunusualword”

请注意,“一个”这个词是检查标记为一个词。这个词被标记,因为词汇量不包含“一个”这个词大写字母“A”。后面的一节的例子显示了如何创建一个不分大小写拼写校正器。

找到最近的使用单词和他们的距离knnsearch函数编辑距离搜索器。

[idxNearestWords d] = knnsearch (eds wordsToCheck)
idxNearestWords =4×1165 1353 1152南
d =4×11 1 2正

如果没有发现任何的单词搜索者,那么函数返回索引随着距离的。“averyunusualword”这个词没有匹配编辑距离2内,函数返回索引这个词。

找到单词用积极的指数有限的编辑距离。

idxMatches = ~ isnan (idxNearestWords)
idxMatches =4×1逻辑数组1 1 1 0

得到指数与匹配的单词搜索器和视图中相应的纠正单词的词汇量。

idxCorrectedWords = idxNearestWords (idxMatches)
idxCorrectedWords =3×1165 1353 1152
correctedWords = eds.Vocabulary (idxCorrectedWords)
correctedWords =1×3的字符串“一个”“例子”“文档”

替换匹配与纠正单词拼错的单词。

idxToCorrect = idxWordsToCheck (idxMatches);单词(idxToCorrect) = correctedWords
话说=1×8字符串”一个“例子”“文档”与“错误”“和““averyunusualword”“。”

这些单词创建一个标记化的文档,使用tokenizedDocument功能和设置“TokenizedMethod”“没有”

文档= tokenizedDocument(话说,“TokenizeMethod”,“没有”)
文档= tokenizedDocument: 8标记:一个例子文件错误和averyunusualword。

下一节将展示如何正确拼写的多个文档通过创建一个定制的拼写校正功能和使用docfun

创建拼写校正函数

正确的拼写在多个文档,使用的代码创建一个自定义函数一节和使用这个函数docfun函数。

创建一个函数,它接受一个编辑距离搜索者,一个字符串数组的话,和相应的表牌细节纠正单词的输入和输出。的用语函数,列出的例子,纠正单词的拼写在字符串数组使用对应的令牌的细节和一个编辑距离搜索者。

使用这个函数docfun函数创建一个处理函数,它接受一个字符串数组的单词和相应的表牌细节作为输入。

func = @(话说,tdetails)用语(eds,话说,tdetails);

正确的拼写标记化的文档使用的数组docfun函数处理函数

str = [“这是一些reallyu严重wrirten texct。”“一些moree mitsakes这里。”];文件= tokenizedDocument (str);updatedDocuments = docfun(函数、文件)
updatedDocuments = 2×1 tokenizedDocument: 8令牌:这里有一些真的写得很糟糕的文本。6代币:更多的错误。

注意,不同小写字母大写字符可以得到纠正。例如,“有些”这个词可以纠正“来”。如果多个相同的单词在编辑距离搜索词汇输入编辑距离,然后发现这个函数输出第一个结果。例如,单词“来”和“一些”两个编辑距离1从“一些”这个词。

下一节将展示如何创建一个拼写校正器,不区分大小写。

创建不分大小写拼写校正器

防止差异与其他替换,以防发生冲突,创建一个编辑距离搜索者与小写的词汇,并在使用前将文档转换为小写的编辑距离搜索器。

词汇表转换为小写的。这个操作可以引入重复的单词,删除它们以独特的价值观。

vocabularyLower =低(词汇);vocabularyLower =独特(vocabularyLower);

创建一个编辑距离搜索者使用小写的词汇使用相同的选项。这可能需要几分钟。

maxDist = 2;eds = editDistanceSearcher (vocabularyLower maxDist,“SwapCost”1);

利用编辑距离搜索器正确的拼写单词标记化的文档。使用不分大小写拼写校正器,将文档转换为小写的。

documentsLower =低(文件);

正确的拼写使用新的编辑距离搜索者使用相同的步骤。

func = @(话说,tdetails)用语(eds,话说,tdetails);documentsLower updatedDocuments = docfun(函数)
updatedDocuments = 2×1 tokenizedDocument: 8令牌:这里有一些真的写得很糟糕的文本。6代币:一些更多的错误。

这里,“有些”一词的原始文本转换为“一些”前输入拼写校正器。“一些”对应的词搜索者的影响是一些发生在这个词的词汇量。

拼写校正功能

用语字符串数组的函数纠正拼写单词使用对应的令牌的细节和一个编辑距离搜索者。您可以使用此函数docfun正确拼写的多个文档。

函数用语词汇= (eds,话说,tdetails)%得到指数拼错的单词忽略复杂的令牌。idxVocabularyWords = ismember (tdetails.Token eds.Vocabulary);idxComplexTokens =tdetails。类型~ =“字母”&tdetails。类型~ =“其他”;idxWordsToCheck =~ idxVocabularyWords &~ idxComplexTokens;%转换为数字指标。idxWordsToCheck =找到(idxWordsToCheck);%找到最近的单词。wordsToCheck =单词(idxWordsToCheck);idxNearestWords = knnsearch (eds、wordsToCheck);%发现单词比赛。idxMatches = ~ isnan (idxNearestWords);%得到纠正单词。idxCorrectedWords = idxNearestWords (idxMatches);correctedWords = eds.Vocabulary (idxCorrectedWords);%正确单词。idxToCorrect = idxWordsToCheck (idxMatches);单词(idxToCorrect) = correctedWords;结束

另请参阅

||||||

相关的话题