private void collectWordInfo(String path, Searcher wid, String prefix,
				 ArrayList<ArrayList<WordInfo>> ws) throws ParseException, IOException {
	final ReadLine rl = new ReadLine(path, encoding);
	try {
	    for(String s=rl.read(); s!=null; s=rl.read()) {
		final boolean iscomma = s.startsWith("\",\",");
		final int p1 = iscomma ? 3 : s.indexOf(delim,1);     // key
		final int p2 = s.indexOf(delim,p1+1);  // left id
		final int p3 = s.indexOf(delim,p2+1);  // right id
		final int p4 = s.indexOf(delim,p3+1);  // cost
		if(p1==-1) throw parseException("Word surface must be terminated with '"+delim+"'.",path,rl);
		if(p2==-1) throw parseException("Word left context id must be terminated with '"+delim+"'.",path,rl);
		if(p3==-1) throw parseException("Word right context id must be terminated with '"+delim+"'.",path,rl);
		if(p4==-1) throw parseException("Word cost must be terminated with '"+delim+"'.",path,rl);

		final String data = s.substring(p4+1); // data

		final int id = wid.search(prefix+(iscomma ? "," : s.substring(0,p1)));
		if(id < 0)
		    throw parseException("Word '"+s.substring(0,p1)+"' is unregistered in trie",path,rl);
		
		ws.get(id).add(new WordInfo(Short.valueOf(s.substring(p1+1,p2)),
					    Short.valueOf(s.substring(p2+1,p3)),
					    Short.valueOf(s.substring(p3+1,p4)),
					    data));
	    }
	} catch (NumberFormatException e) {
	    throw parseException("Parse short integer failed. "+e.getMessage(),path,rl);
	} finally {
	    rl.close();	
	}
    }