微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当某些字母改变时,如何找到复数形式的单数形式?最好的方法是什么?

如何解决当某些字母改变时,如何找到复数形式的单数形式?最好的方法是什么?

当某些字母改变时,如何找到复数形式?

以下情况:

The German word `Schließfach` is a lockBox. 
The plural is `Schließfächer.`

如您所见,a中的字母ä已更改。因此,第一个单词不再是第二个单词的子字符串,它们在“正则表达式技术上”有所不同。

也许我不在下面选择的标签的右上角。也许Regex不是适合我的工具。我已经看到naturaljsnatural.NounIflector())为英语单词提供了开箱即用的功能。也许也有同样方法的德语解决方案?

最好的方法是什么,如何在德语中找到单数形式?

编辑:不能重复!

解决方法

我曾经不得不构建一个文本处理器来解析多种语言,包括非常随意到非常正式的语言。要确定的一件事是某些单词是否相关(例如标题中的名词与一系列事物相关 - 有时用复数形式标记。)

IIRC,在我们支持的所有语言中,70-90% 的单复数词形式的“Levenshtein 距离”小于 3 或 4。(最终添加了几个词典以提高准确性,因为仅“距离”就产生了许多错误积极的。) 另一个有趣的发现是,单词越长,3 或更少的距离越有可能意味着意义上的关系。

以下是我们使用的库的示例:

const fastLevenshtein = require('fast-levenshtein');

console.log('Deburred Distances:')
console.log('Score 1:',fastLevenshtein.get('Schließfächer','Schließfach'));
// -> 3
console.log('Score 2:',fastLevenshtein.get('Blumtach','Blumtächer'));
// -> 3
console.log('Score 3:',fastLevenshtein.get('schließfächer','Schliessfaech'));
// -> 7
console.log('Score 4:',fastLevenshtein.get('not-it','Schliessfaech'));
// -> 12
console.log('Score 5:','Schiesse'));
// -> 8


/**
 * Additional strategy for dealing with other various languages:
 *   "Deburr" the strings to omit diacritics before checking the distance:
 */

const deburr = require('lodash.deburr');
console.log('Deburred Distances:')
console.log('Score 1:',deburr(fastLevenshtein.get('Schließfächer','Schließfach')));
// -> 3
console.log('Score 2:',deburr(fastLevenshtein.get('Blumtach','Blumtächer')));
// -> 3
console.log('Score 3:',deburr(fastLevenshtein.get('schließfächer','Schliessfaech')));
// -> 7


// Same in this case,but helpful in other similar use cases.
,

您可以使用 nlp.js 库中的词干分析器(实际上是词形还原器),该库具有 40 种语言的模型。

const { StemmerDe } = require('@nlpjs/lang-de');

const stemmer = new StemmerDe();
console.log(stemmer.stemWord('Schließfach'));
console.log(stemmer.stemWord('Schließfächer'));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。