为了账号安全,请及时绑定邮箱和手机立即绑定

当某些字母发生变化时,如何在复数中找到单数?最好的方法是什么?

当某些字母发生变化时,如何在复数中找到单数?最好的方法是什么?

海绵宝宝撒 2023-07-29 13:40:34
当某些字母发生变化时,如何找到复数中的单数?以下情况:德语单词Schließfach是“密码箱”。复数是Schließfächer.正如您所看到的,这封信a在 中发生了变化ä。因此,第一个单词不再是第二个单词的子字符串,它们在“正则表达式技术上”是不同的。也许我并不在下面我选择的标签的正确角落。也许正则表达式不是适合我的工具。我已经看到naturaljs( natural.NounIflector()) 为英语单词提供了开箱即用的功能。也许德语也有同样的解决方案?最好的方法是什么,如何在德语中找到复数中的单数?
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

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


IIRC,我们支持的所有语言中 70-90% 的单数和复数单词形式的“编辑距离”小于 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:', fastLevenshtein.get('not-it', '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.


查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信