찾다

 >  Q&A  >  본문

큰 단어 목록에서 자음 하나만 다른 단어를 찾는 방법

<p>저는 ASCII 텍스트로 작성된 거의 5000개의 "판타지" 단어 목록을 가지고 있습니다. 일부 단어는 다음과 같습니다. </p> <pre class="brush:php;toolbar:false;">txintoq 트시크발 txiqfun 틱웩 택시얄 택시톤 txonmiq 톡소울 txoqxik</pre> <p>목록에 있는 두 단어가 "유사 자음" 하나만 다르지 않은지 확인/검증하는 알고리즘을 설계하고 싶습니다.그래서 "유사 자음 집합"을 다음과 같이 (가칭) 정의하겠습니다. </p> <pre class="brush:php;toolbar:false;">zs xj pb TD kg</pre> <p><em>한 세트에 3개 이상의 자음이 있을 수 있지만 지금은 2개만 보여드리겠습니다. 판타지 언어의 성조에서 어떤 자음이 비슷하게 들리는지 더 많이 알게 되면 이 정의를 더욱 구체화할 필요가 있습니다. </em></p> <p>따라서 다음과 같은 단어는 '수정 필요'로 표시됩니다(소리가 너무 비슷하기 때문). </p> <pre class="brush:php;toolbar:false;">txindan txintan # d/t만 다름 수마크 jumaq # x/j만 다릅니다 돌파르 dolbar # b/p만 다릅니다</pre> <p>약 5,000개의 단어 목록에서 자음 하나만 다른 단어를 <em>비교적 효율적인</em> 방식으로 찾으려면 어떻게 해야 합니까? </p> <p>이것은 제가 현재 염두에 두고 있는 매우 순진한 해결책입니다. </p> <pre class="brush:php;toolbar:false;">'fs'에서 fs 가져오기 const 용어 = fs .readFileSync('term.csv', 'utf-8') .손질() .split(/n+/) .map(라인 => { let [용어] = line.split(',') 반품 기간 }) .filter(x => x) const consonantSets = ` zs xj pb TD kg' .split(/n+/) .map(x => x.split('')) 함수 계산SimilarTerms( 용어: 문자열, consonantSets: 배열>, ) { const termLetters = 용어?.split('') ?? [] const newTerms: 배열<string> for (const consonantSet of consonantSets) { for (consonantSet의 상수 문자) { for (consonantSet의 const letter2) { if (문자 === 문자2) { 계속하다 } 내가 = 0이라고 하자 while (i < termLetters.length) { const termLetter = 용어Letters[i] if (termLetter === 문자) { const newTerm = termLetters.concat() 용어Letters[i] = letter2 newTerms.push(newTerm.join('')) } 나++ } } } } newTerms 반환 } for (항의 용어) { const 유사한Terms = 계산SimilarTerms(term, consonantSets) 유사한 용어.forEach(similarTerm => { if (terms.includes(similarTerm)) { console.log(용어, 유사용어) } }) }</pre> <p>상대적으로 적은 힘으로 이를 어떻게 달성할 수 있습니까? 그리고 이 솔루션은 <em>가능한 모든 유사한 단어 조합</em>을 구축하지 못하기 때문에 불완전합니다. 따라서 알고리즘 어딘가에서 이를 수행할 수 있어야 합니다. 어떤 아이디어가 있나요? </p>
P粉757640504P粉757640504468일 전603

모든 응답(1)나는 대답할 것이다

  • P粉238433862

    P粉2384338622023-08-16 13:13:46

    각 그룹에서 해당 그룹의 "대표자"가 될 자음을 선택하세요. 그런 다음 자음을 대표 자음으로 바꾸면 단어가 동일해지도록 단어를 그룹화하는 맵을 만듭니다.

    중요 사항: 이 방법은 자음 그룹이 동등 클래스를 형성하는 경우에만 작동합니다. 특히 자음 유사성은 추이적이어야 합니다. 'bp'相似,'bv'相似,但'pv'가 유사하지 않으면 이 방법은 효과가 없습니다.

    다음은 Python 예제에 대한 코드입니다. JavaScript 코드를 작성해 보겠습니다.

    • f는 각 자음을 대표 자음으로 매핑한 매핑입니다.
    • 는 각 표현된 단어를 이 표현이 포함된 단어 목록에 매핑하는 지도입니다. d
    • 으아악
    마지막으로 어떤 단어가 비슷한지 확인할 수 있습니다.

    으아악

    회신하다
    0
  • 취소회신하다