如何对混合了英文和中文字符的文本进行Norvig拼写检查?

我的数据库中存储了一系列产品名称,这些名称由英文字符、数字和中文字符混合组成。

有一个名为products的表,其中包含name_enname_zh等字段。

例如:

AB 10"机翼

Peter Norvig有一个出色的拼写检查算法,但它仅适用于英文。

我想知道是否有办法对包含中文字符的特定术语列表进行类似的操作?

例如,拼写错误如:

A10机翼AB 10鸡翼AB 10鸡一AB 10木几翼

所有这些都会提示AB 10"机翼为正确的拼写

我该如何实现这一点?


回答:

你面临的问题比Norvig的要复杂得多:

中文输入法

在你的例子中(至少在你的示例中),拼写错误主要是由拼音输入法引起的。同样的“jiyi”(英文:飞机翅膀)输入可能会导致不同的中文短语:

 机翼 鸡翼 鸡一 几翼

中文分词

此外,在中文中,要将长句子分解成具有语义意义的小标记,你需要进行分词。例如:

飞机模型零件 ->  分词前飞机-模型-零件   分词后你得到了三个由'-'分隔的短语。

在标记级别上工作

你可能可以从一系列拼写错误开始进行实验。我猜你可以从用户日志中收集一批这样的错误。每次取出一个拼写错误,使用你的例子:

AB 10鸡翼

首先将其分解成标记:

A-B-10-鸡翼

(在这里,你可能需要一个中文分词算法来识别鸡翼应该被视为一个整体)。

然后,你应该尝试使用编辑距离的概念在你的产品数据库中找到其最近的邻居。请注意:

  • 你不是一次移除/编辑/替换一个字符,而是一次移除/编辑/替换一个标记。
  • 在编辑/替换时,我们应该将候选者限制为原始标记的近邻。例如,鸡翼 -> 机翼,几翼,机一

构建Lucene索引

你还可以尝试从正确的产品名称开始,以不同的方式解决这个问题。将每个产品名称视为一个文档,并从中预构建Lucene索引。然后,对于每个用户查询,查询匹配问题就转化为一个搜索问题,我们向搜索引擎发出查询,以在我们的数据库中找到最匹配的文档。在这种情况下,我相信Lucene可能会处理分词(如果没有,你需要扩展其功能以满足自己的需求)和标记化工作。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注