要处理一个文档集合,需要统计出corpus包含的所有单词,即统计出一个词汇表,词汇表中需要保存单词和相应的索引。当然,统计之前需要对文档进行stopword removal和text stemming。得到词汇表后,很自然地,我们有两种需求,一是根据单词得到它的索引,另外一个就是根据索引得到相应的单词。但是jdk中的map类只支持根据key来获取value,如果要根据value获取key就需要使用entryset方法得到所有的entry,再遍历一遍,判断每个entry的value是否就是我们期望的,如果是,就记下这个entry相应的key,具体参考这里。
当然,那是比较ugly的做法。我们可以使用Apache Commons Collections中的BidiMap接口来完成这个任务,使用这个接口的限制之一就是key和value必须是一一对应(one to one)的。下面是一个简单的示例:
BidiMap bidi = new HashBidiMap();
bidi.put("SIX", "6");
bidi.get("SIX"); // returns "6"
bidi.getKey("6"); // returns "SIX"
bidi.removeValue("6"); // removes the mapping
BidiMap inverse = bidi.inverseBidiMap(); // returns a map with keys and values swapped
在google上还可以搜到几个例子:
http://java.dzone.com/ar