많은 철자로 텍스트가 포함 된 많은 문자열이 있습니다. 키워드를 검색하여 이러한 문자열을 토큰 화하고 키워드가 발견되면 해당 키워드에 대해 관련 텍스트를 사용합니다.텍스트의 모든 키워드를 찾는 효율적인 알고리즘
검색 문자열에 "schw.", "schwa"라는 텍스트가 포함될 수 있습니다. 및 "schwarz". 세 단어가 모두 "schwarz"라는 텍스트로 해석됩니다.
이제 모든 단일 키워드에 대해 string.Contains (키워드)를 수행하지 않고 모든 키워드를 찾는 효과적인 방법을 찾고 있습니다.
샘플 데이터 :
H-Fuss ahorn 15 cm/SH48cm
Metall-Fuss chrom 9 cm/SH42cm
Metall-Kufe alufbg.12 cm/SH45c
Metall-Kufe verchr.12 cm/SH45c
Metall-Zylind.aluf.12cm/SH45cm
Kufe alufarbig
Metall-Zylinder hoch alufarbig
Kunststoffgl.schw. - hoch
Kunststoffgl.schw. - Standard
Kunststoffgleiter - schwarz für Sitzhoehe 42 cm
샘플 키워드 (키, 값) :
h-fuss, Holz
ahorn, Ahorn
metall, Metall
chrom, Chrom
verchr, Chrom
alum, Aluminium
aluf, Aluminium
kufe, Kufe
zylind, Zylinder
hoch, Hoch
kunststoffgl, Gleiter
gleiter, Gleiter
schwarz, Schwarz
schw., Schwarz
샘플 결과 :
Holz, Ahorn
Metall, Chrom
Metall, Kufe, Aluminium
Metall, Kufe, Chrom
Metall, Zylinder, Aluminium
Kufe, Aluminium
Metall, Zylinder, Hoch, Aluminium
Gleiter, Schwarz, Hoch
Gleiter, Schwarz
Gleiter, Schwarz
+1 좋은 물건. 감사. – Aliostad
Aho-Crasick 알고리즘은 정말로 유망 해 보입니다. 현재 알고리즘을 구현하는 CodeProject 프로젝트를보고 있습니다. http://www.codeproject.com/KB/recipes/ahocorasick.aspx – VVS
Aho-Corasick은 정확히 원하는 것입니다. 내가 제안하는 또 다른 해결책은 re2를 기반으로하는 무언가와 같은 DFA를 구성하는 정규식 라이브러리를 사용하는 것입니다. http://code.google.com/p/re2/ –