寻找只有一个辅音不同的单词在大型单词列表中的方法
P粉757640504
P粉757640504 2023-08-15 16:26:13
[JavaScript讨论组]

我有一个近5000个“幻想”单词的列表,这些单词以ASCII文本形式书写。其中一些单词如下:

txintoq
txiqbal
txiqfun
txiqwek
txiqyal
txiyton
txonmiq
txoqwul
txoqxik

我想设计一个算法,检查/验证列表中没有两个单词之间只相差一个“相似辅音”。因此,我会像这样定义“相似辅音集合”(暂时):

zs
xj
pb
td
kg

一个集合中可能有3个或更多辅音,但我现在只展示2个。随着我对幻想语言音调中哪些辅音听起来相似的了解越来越深入,我需要进一步调整这个定义。

因此,像下面这样的单词将被标记为“需要修正”(因为它们听起来太相似):

txindan
txintan # 只有d/t不同

xumaq
jumaq # 只有x/j不同

dolpar
dolbar # 只有a b/p不同

我如何在我的约5000个单词列表中以相对高效的方式找到这些只相差一个辅音的单词?

这是我目前所想到的一种非常天真的解决方法,如下所示:

import fs from 'fs'

const terms = fs
  .readFileSync('term.csv', 'utf-8')
  .trim()
  .split(/n+/)
  .map(line => {
    let [term] = line.split(',')
    return term
  })
  .filter(x => x)

const consonantSets = `
zs
xj
pb
td
kg`
  .split(/n+/)
  .map(x => x.split(''))

function computeSimilarTerms(
  term: string,
  consonantSets: Array<Array<string>>,
) {
  const termLetters = term?.split('') ?? []
  const newTerms: Array<string> = []
  for (const consonantSet of consonantSets) {
    for (const letter of consonantSet) {
      for (const letter2 of consonantSet) {
        if (letter === letter2) {
          continue
        }

        let i = 0
        while (i < termLetters.length) {
          const termLetter = termLetters[i]
          if (termLetter === letter) {
            const newTerm = termLetters.concat()
            termLetters[i] = letter2
            newTerms.push(newTerm.join(''))
          }

          i++
        }
      }
    }
  }
  return newTerms
}

for (const term of terms) {
  const similarTerms = computeSimilarTerms(term, consonantSets)
  similarTerms.forEach(similarTerm => {
    if (terms.includes(similarTerm)) {
      console.log(term, similarTerm)
    }
  })
}

如何以相对较少的蛮力方式完成这个任务?而且这个解决方法还不完整,因为它没有构建所有可能相似的单词组合。所以在算法的某个地方,它应该能够做到这一点。有什么想法吗?

P粉757640504
P粉757640504

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号