Révision 3780
| TXM/trunk/bundles/org.txm.treesearch.rcp/src/org/txm/treesearch/rcp/tester/TreeSearchTester.java (revision 3780) | ||
|---|---|---|
| 1 | 1 |
package org.txm.treesearch.rcp.tester; |
| 2 | 2 |
|
| 3 |
import java.io.File; |
|
| 4 | 3 |
import java.util.List; |
| 5 | 4 |
|
| 6 | 5 |
import org.eclipse.core.expressions.PropertyTester; |
| 7 |
import org.txm.searchengine.cqp.corpus.MainCorpus;
|
|
| 6 |
import org.txm.searchengine.cqp.corpus.CQPCorpus;
|
|
| 8 | 7 |
import org.txm.treesearch.command.ComputeTreeSearch; |
| 9 | 8 |
|
| 10 | 9 |
/** |
| ... | ... | |
| 39 | 38 |
} |
| 40 | 39 |
|
| 41 | 40 |
receiver = l.get(0); |
| 42 |
if (!(receiver instanceof MainCorpus)) return false;
|
|
| 41 |
if (!(receiver instanceof CQPCorpus)) return false;
|
|
| 43 | 42 |
|
| 44 |
MainCorpus corpus = (MainCorpus) receiver;
|
|
| 45 |
if (!(receiver instanceof MainCorpus)) {
|
|
| 43 |
CQPCorpus corpus = (CQPCorpus) receiver;
|
|
| 44 |
if (!(receiver instanceof CQPCorpus)) {
|
|
| 46 | 45 |
return false; |
| 47 | 46 |
} |
| 48 | 47 |
|
| TXM/trunk/bundles/org.txm.tigersearch.rcp/src/org/txm/function/tigersearch/TIGERSearch.java (revision 3780) | ||
|---|---|---|
| 246 | 246 |
pQuery = new TIGERQuery("root(#n1)"); //$NON-NLS-1$
|
| 247 | 247 |
} |
| 248 | 248 |
|
| 249 |
tsresult = tscorpus.query(pQuery.getQueryString()); |
|
| 249 |
// tsresult = tscorpus.query(pQuery.getQueryString()); |
|
| 250 |
tsresult = TIGERSearchEngine.getInstance().queryTIGER(this.getCorpus(), pQuery); |
|
| 250 | 251 |
tsresult.getFirst(); |
| 251 | 252 |
|
| 252 | 253 |
pIndex = 0; |
| TXM/trunk/bundles/org.txm.tigersearch.rcp/src/org/txm/searchengine/ts/TSCorpus.java (revision 3780) | ||
|---|---|---|
| 71 | 71 |
boolean initok = false; |
| 72 | 72 |
|
| 73 | 73 |
/** The results. */ |
| 74 |
HashMap<Integer, TSResult> results = new HashMap<>();
|
|
| 74 |
HashMap<String, TSResult> results = new HashMap<>();
|
|
| 75 | 75 |
|
| 76 | 76 |
// Additional data for corpus alignment with TXM base corpus (CQP corpus) |
| 77 | 77 |
RandomAccessFile offsetsRAFile = null; |
| ... | ... | |
| 303 | 303 |
* @throws Exception |
| 304 | 304 |
*/ |
| 305 | 305 |
public TSResult query(String query, int sent_min, int sent_max, int match_max) throws Exception {
|
| 306 |
if (results.containsKey(query.hashCode())) |
|
| 307 |
return results.get(query.hashCode()); |
|
| 306 |
String skey = query+ " "+sent_min+" "+sent_max+" "+match_max; |
|
| 307 |
if (results.containsKey(skey)) {
|
|
| 308 |
return results.get(skey); |
|
| 309 |
} |
|
| 308 | 310 |
|
| 309 | 311 |
TSResult rez = new TSResult(query, this, sent_min, sent_max, match_max); |
| 310 |
results.put(query.hashCode(), rez);
|
|
| 312 |
results.put(skey, rez);
|
|
| 311 | 313 |
return rez; |
| 312 | 314 |
} |
| 313 | 315 |
|
| TXM/trunk/bundles/org.txm.tigersearch.rcp/src/org/txm/searchengine/ts/TIGERSearchEngine.java (revision 3780) | ||
|---|---|---|
| 1 | 1 |
package org.txm.searchengine.ts; |
| 2 | 2 |
|
| 3 | 3 |
import java.io.File; |
| 4 |
import java.io.FileFilter; |
|
| 5 | 4 |
import java.io.FileNotFoundException; |
| 6 | 5 |
import java.io.IOException; |
| 7 | 6 |
import java.io.PrintWriter; |
| ... | ... | |
| 10 | 9 |
import java.nio.MappedByteBuffer; |
| 11 | 10 |
import java.nio.channels.FileChannel; |
| 12 | 11 |
import java.util.ArrayList; |
| 13 |
import java.util.Arrays; |
|
| 14 | 12 |
import java.util.HashMap; |
| 15 | 13 |
import java.util.LinkedHashSet; |
| 16 | 14 |
import java.util.List; |
| ... | ... | |
| 27 | 25 |
import org.txm.searchengine.core.Query; |
| 28 | 26 |
import org.txm.searchengine.core.SearchEngine; |
| 29 | 27 |
import org.txm.searchengine.core.SearchEngineProperty; |
| 28 |
import org.txm.searchengine.core.SearchEnginesManager; |
|
| 30 | 29 |
import org.txm.searchengine.core.Selection; |
| 31 | 30 |
import org.txm.searchengine.cqp.AbstractCqiClient; |
| 32 | 31 |
import org.txm.searchengine.cqp.CQPSearchEngine; |
| ... | ... | |
| 62 | 61 |
HashMap<CorpusBuild, TSCorpus> corpora = null; |
| 63 | 62 |
|
| 64 | 63 |
public TSCorpus getTSCorpus(CorpusBuild corpus) {
|
| 64 |
|
|
| 65 | 65 |
CorpusBuild root = corpus.getRootCorpusBuild(); |
| 66 | 66 |
TSCorpus tscorpus = corpora.get(root); |
| 67 | 67 |
if (tscorpus != null) {
|
| ... | ... | |
| 183 | 183 |
public Selection query(CorpusBuild corpus, IQuery query, String name, boolean saveQuery) throws Exception {
|
| 184 | 184 |
|
| 185 | 185 |
TSCorpus tcorpus = this.getTSCorpus(corpus); |
| 186 |
TSResult result = queryTIGER(corpus, query); |
|
| 187 |
|
|
| 188 |
if (result == null) { // no result
|
|
| 189 |
return new EmptySelection(query); |
|
| 190 |
} |
|
| 191 |
|
|
| 192 |
return fromTIGERMatchToSelection(tcorpus, result, query, corpus); |
|
| 193 |
} |
|
| 194 |
|
|
| 195 |
public TSResult queryTIGER(CorpusBuild corpus, IQuery query) throws Exception {
|
|
| 196 |
|
|
| 197 |
TSCorpus tcorpus = this.getTSCorpus(corpus); |
|
| 186 | 198 |
TSResult result = null; |
| 187 | 199 |
if (corpus == corpus.getRootCorpusBuild() || !(corpus instanceof CQPCorpus)) { // root corpus or something not a CQPCorpus
|
| 188 | 200 |
result = tcorpus.query(query.getQueryString().replace("\n", " "));
|
| ... | ... | |
| 192 | 204 |
AbstractCqiClient CQI = CQPSearchEngine.getCqiClient(); |
| 193 | 205 |
List<? extends Match> matches = cqpCorpus.getMatches(); |
| 194 | 206 |
if (matches.size() == 0) {
|
| 195 |
return new EmptySelection(query);
|
|
| 207 |
return result;
|
|
| 196 | 208 |
} |
| 197 | 209 |
int[] cpos = { matches.get(0).getStart(), matches.get(matches.size() - 1).getEnd() };
|
| 198 |
int[] structs = CQI.cpos2Struc(cqpCorpus.getStructuralUnit("s").getProperty("n").getQualifiedName(), cpos);
|
|
| 199 |
if (structs.length == 0) {
|
|
| 200 |
return new EmptySelection(query); |
|
| 210 |
|
|
| 211 |
int[] starts = tcorpus.getSentenceStartPositions(); |
|
| 212 |
int sent_max = starts.length; |
|
| 213 |
int sent_min = 0; |
|
| 214 |
for (int i = 0 ; i < starts.length ; i++) {
|
|
| 215 |
if (starts[i] < cpos[0]) {
|
|
| 216 |
sent_min = i; |
|
| 217 |
} else if (starts[i] > cpos[1]) {
|
|
| 218 |
sent_max = i; |
|
| 219 |
break; |
|
| 220 |
} |
|
| 201 | 221 |
} |
| 202 |
int sent_min = structs[0]; |
|
| 203 |
int sent_max = structs[structs.length - 1]; |
|
| 222 |
|
|
| 204 | 223 |
Log.finest("QUERYING sentences: " + sent_min + " -> " + sent_max);
|
| 205 |
result = tcorpus.query(query.getQueryString().replace("\n", " "), sent_min, sent_max + 1, -1);
|
|
| 224 |
result = tcorpus.query(query.getQueryString().replace("\n", " "), sent_min, sent_max, -1);
|
|
| 206 | 225 |
} |
| 207 | 226 |
|
| 208 |
return fromTIGERMatchToSelection(tcorpus, result, query, corpus);
|
|
| 227 |
return result;
|
|
| 209 | 228 |
} |
| 210 | 229 |
|
| 211 | 230 |
public static Selection fromTIGERMatchToSelection(TSCorpus tcorpus, TSResult result, IQuery query, CorpusBuild corpus) throws IndexException {
|
| ... | ... | |
| 621 | 640 |
} |
| 622 | 641 |
return null; |
| 623 | 642 |
} |
| 643 |
|
|
| 644 |
public static TIGERSearchEngine getInstance() {
|
|
| 645 |
return (TIGERSearchEngine) SearchEnginesManager.getTIGERSearchEngine(); |
|
| 646 |
} |
|
| 624 | 647 |
} |
Formats disponibles : Unified diff