本文共 2446 字,大约阅读时间需要 8 分钟。
对若干行文字建立倒排索引(根据单词找到所在行号)。 然后根据关键字,在倒排索引查找进行查找,找到包含所有该关键字所在的行数并输出。
输入说明若干行英文,以!!!!!为结束。输入一行查询关键字,以1个空格为分隔
输出说明
输出所创建倒排索引。索引的key按照字母升序,索引的value按照行号升序输出查询结果。如果找到,输出行集与行集内每一行的内容,如果没找到输出found 0 results
输入样例
where are you from are you ok
this is a test that is an apple there are lots of apples you eat it who are you !!! you are eat you test abc输出样例
a=[2]
an=[3] apple=[3] apples=[4] are=[1, 4, 5] eat=[4] from=[1] is=[2, 3] it=[4] lots=[4] of=[4] ok=[1] test=[2] that=[3] there=[4] this=[2] where=[1] who=[5] you=[1, 4, 5] [1, 4, 5] line 1:where are you from are you ok line 4:there are lots of apples you eat it line 5:who are you [4] line 4:there are lots of apples you eat it found 0 results found 0 resultsimport java.util.*;import java.util.Map.Entry;public class Main { public static void main(String[] args) { Scanner se = new Scanner(System.in); HashMap> h = new HashMap >(); ArrayList original_article=new ArrayList (); ArrayList all_rows_number=new ArrayList (); int NO_of_rows = 0; while (true) { String s = se.nextLine(); if (s.equals("!!!!!")) { break; }else if(s==null||s.length()==0||(s != null && s.equals(""))) { continue; }else{ original_article.add(s); NO_of_rows++; all_rows_number.add(NO_of_rows); String a[] = s.split("\\s+"); for (int i = 0; i < a.length; i++) { if (a[i] == null || a[i].length() == 0) continue; if (!h.containsKey(a[i])) { ArrayList l = new ArrayList (); l.add(NO_of_rows); h.put(a[i], l); } else { ArrayList w=h.get(a[i]); if(!w.contains(NO_of_rows)) { w.add(NO_of_rows); } h.put(a[i], w); } } } } ArrayList >> al = new ArrayList >>( h.entrySet()); Collections.sort(al, Comparator.comparing(Map.Entry::getKey)); for (Map.Entry > e : al) { System.out.println(e.getKey() + "=" + e.getValue()); } while(se.hasNext()) { String s=se.nextLine(); ArrayList > q=new ArrayList >(); String a[]=s.split("\\s+"); for(int i=0;i d=returnIntersectionOfList(q); if(d.size()>0) { System.out.println(d); for(int r:d) { if(all_rows_number.contains(r)) { System.out.println("line "+r+":"+original_article.get(r-1)); } } }else { System.out.println("found 0 results"); } } } public static ArrayList returnList(ArrayList >> al ,String args){ for (Map.Entry > e : al) { if(e.getKey().equals(args)){ return e.getValue(); } } return new ArrayList (); } public static ArrayList returnIntersectionOfList(ArrayList > q){ ArrayList d=q.get(0); for(int i=1;i
转载地址:http://embdi.baihongyu.com/