누군가가 soundex algorithm 프로그램에 사용할 데이터 구조를 제안 할 수 있습니까? 사용할 언어는 Java입니다. 자바에서 이전에 작업 한 사람이 있다면. 이러한 기능을 가지고 있어야이 프로그램은 : 단지 몇 가지 조언 어떤 데이터에 나는 프로그램 구현을 원하지 않는 같은 사운 덱스soundex 알고리즘의 데이터 구조?
을 갖는 관련 단어를 이 단어를 읽을 수 있어야 약 50,000 단어를 읽고 돌아갈 수 사용할 구조.
누군가가 soundex algorithm 프로그램에 사용할 데이터 구조를 제안 할 수 있습니까? 사용할 언어는 Java입니다. 자바에서 이전에 작업 한 사람이 있다면. 이러한 기능을 가지고 있어야이 프로그램은 : 단지 몇 가지 조언 어떤 데이터에 나는 프로그램 구현을 원하지 않는 같은 사운 덱스soundex 알고리즘의 데이터 구조?
을 갖는 관련 단어를 이 단어를 읽을 수 있어야 약 50,000 단어를 읽고 돌아갈 수 사용할 구조.
원본 문자열을 soundex 키로 변환하여 해시 테이블로 변환해야한다고 생각합니다. 테이블의 각 항목에 대한 값은 해당 soundex에 매핑되는 원래 문자열의 모음이됩니다.
의 MultiMap 컬렉션 인터페이스 (및 그 구현)가 유용 할 것입니다.
힌트 : SQL을 databackend로 사용하는 경우 SQL에서 두 sql-function SOUNDEX 및 DIFFERENCE로 처리하도록 할 수 있습니다.
아마도 원하는 것은 아니지만 많은 사람들은 MSSQL에이 두 가지 기능이 있다는 것을 모릅니다.
잘 soundex는 문자열을 직접 전달할 수 있으므로 특별한 사항은 필요하지 않습니다.
그런 다음 4 문자 코드를 정수 키로 처리 할 수 있습니다.
그런 다음 정수 키로 색인 된 단어 집합을 저장하는 사전을 작성하십시오. 50,000 단어가 메모리에 쉽게 들어가야하므로 아무 것도 필요하지 않습니다.
다음 사전을 걷고 각 버킷은 비슷한 소리가 나는 단어 그룹입니다. 사운 덱스는 해시이기 때문에
#!/usr/bin/perl
use Text::Soundex;
use Data::Dumper;
open(DICT,"</usr/share/dict/linux.words");
my %dictionary =();
while (<DICT>) {
chomp();
chomp();
push @{$dictionary{soundex($_)}},$_;
}
close(DICT);
while (<>) {
my @words = split/+/;
foreach (@words) {
print Dumper $dictionary{soundex($_)};
}
}
, 내가 키와 사운 덱스와 해시 테이블을 사용하십시오 :
사실, 여기에 펄에서 전체 프로그램입니다.
class SpellChecker
{
interface Hash {
String hash(String);
}
private final Hash hash;
private final Map<String, Set<String>> collisions;
SpellChecker(Hash hash) {
this.hash = hash;
collisions = new TreeSet<String, Set<String>>();
}
boolean addWord(String word) {
String key = hash.hash(word);
Set<String> similar = collisions.get(key);
if (similar == null)
collisions.put(key, similar = new TreeSet<String>());
return similar.add(word);
}
Set<String> similar(String word) {
Set<String> similar = collisions.get(hash.hash(word));
if (similar == null)
return Collections.emptySet();
else
return Collections.unmodifiableSet(similar);
}
}
해시 전략은 Soundex, Metaphone 일 수 있습니다. 일부 전략을 조정할 수 있습니다 (얼마나 많은 문자를 출력합니까?)
4 바이트 정수가 필요합니다.
soundex 알고리즘은 항상 4 문자 코드를 반환합니다. ANSI 입력을 사용하면 4 바이트 문자가 반환됩니다 (4 문자로 표시).
이렇게 해시 테이블에 반환 된 코드를 저장하고 코드로 단어를 변환하여 해시 테이블에서 찾으십시오. 정말 쉽습니다.
왜 이중형입니까? (DOS 파일에서 CR과 LF를 모두 제거 할 수 있습니까?) –
DOS가 없으면 그렇지 않은 경우가 있습니다. –
글쎄, 글을 쓰고 난 후에 그 질문이 자바라는 태그임을 깨달았다. 하지만 나는이 정보를 유익하다고 생각하기 때문에 여기에 남겨두고 있습니다. –