HashMap <String,ArrayList<String>>
単語とその同義語を保持するためにを使用してシソーラスを構築しています(このデータ構造が必要です)。
割り当ての目的上、同義関係は推移的と見なされます。(シソーラスをグラフとして想像することができます)。私が達成しようとしているのは、このグラフをテキストファイルに印刷し、各行にコンポーネントを接続することです。つまり、同義語として一緒にプールできるすべての単語は1行にまとめる必要があります。
public void save() {
try {
FileWriter fw = new FileWriter(defaultDefinitionFile);
BufferedWriter out = new BufferedWriter(fw);
Set<String> keys = thesaurus.keySet();
Iterator<String> ite = keys.iterator();
while (ite.hasNext()) {
String key = ite.next();
out.write(key);
ArrayList<String> synonyms = thesaurus.get(key);
Iterator<String> i = synonyms.iterator();
while (i.hasNext()) {
String syn = i.next();
out.write(","+syn);
keys.remove(syn);
}
out.write("\r\n");
}
out.close();
fw.close();
}
catch (Exception e) {
System.out.println("Error writing to file");
e.printStackTrace();
}
}
これは私がそれが起こることをどのように描いたかです:
各同義語と一緒に単語を印刷してから、それらの同義語をデータ構造から削除して、重複する行がないようにします。
もちろん問題は、ハッシュマップの内容を繰り返し処理している間は何も削除できないことです。
私が見逃している代替アプローチはありますか?
PS私は、タイトルが雄弁で簡潔である必要があるという理由だけで、「グラフ」のメタファーをずっと維持しています。私は、この比喩の有用性が限られていることを理解しています。