0
好吧,我正在尝试制作一个Map <String, Integer>
,其关键是单词,值是频率。然后使用它我想要做一个Map<String, Map<String, Integer>>
这样的关键是文档标题和价值是地图与文档的术语频率。这里是我的方法:使用Lucene创建一个术语频率的地图
private Map<Integer, Map<String, Integer>> findTFs(Set<String> terms)
throws IOException {
// get an iterator for all the terms (words)
TermsEnum termEnum = MultiFields.getTerms(reader, "content").iterator(
null);
//main map
tf = new HashMap<Integer, Map<String, Integer>>();
while (termEnum.next() != null) {
//the parameter "terms" is just the 50 top words of the all documents
if (terms.contains(termEnum.term().utf8ToString())) {
//Document enumerator
DocsEnum docEnum = MultiFields.getTermDocsEnum(reader,
MultiFields.getLiveDocs(reader), "content",
termEnum.term());
int doc = DocsEnum.NO_MORE_DOCS;
int count = 0;
while ((doc = docEnum.nextDoc()) != DocsEnum.NO_MORE_DOCS) {
System.out.println(docEnum.docID() + ": "
//document title
+ reader.document(docEnum.docID()).get("title")
//word
+ ": " + termEnum.term().utf8ToString() + ": "
//frequency
+ docEnum.freq());
}
}
}
return tf
}
我的问题是,这些环设置,使得它们移动到每个字的下一个文件,我一直在做每个文档在一张地图中挣扎。任何帮助,将不胜感激。
您可以向代码添加更多文档以便可以轻松读取它吗?谢谢。 – bigT 2015-02-09 01:55:15
增加了一些意见,谢谢! – user111702 2015-02-09 02:00:56
如果你用inner while循环切换外部while循环,那么怎么样?您的控制循环(外部循环)应该是循环遍历文档的循环,并且对于每个文档循环通过术语(这是内部循环)来找出文档中每个术语的频率。当你没有更多的条件可以尝试时,你会转到下一个文档,然后再做同样的事情,直到你没有文档。 – bigT 2015-02-09 02:18:11