use of edu.uci.ics.textdb.exp.keywordmatcher.KeywordPredicate in project textdb by TextDB.
the class DictionaryMatcher method open.
@Override
public void open() throws DataFlowException {
if (cursor != CLOSED) {
return;
}
try {
if (inputOperator == null) {
throw new DataFlowException(ErrorMessages.INPUT_OPERATOR_NOT_SPECIFIED);
}
predicate.getDictionary().resetCursor();
currentDictionaryEntry = predicate.getDictionary().getNextEntry();
if (currentDictionaryEntry == null) {
throw new DataFlowException("Dictionary is empty");
}
keywordPredicate = new KeywordPredicate(currentDictionaryEntry, predicate.getAttributeNames(), predicate.getAnalyzerString(), predicate.getKeywordMatchingType(), predicate.getSpanListName());
keywordMatcher = new KeywordMatcher(keywordPredicate);
cacheOperator = new DictionaryTupleCacheOperator();
cacheOperator.setInputOperator(inputOperator);
keywordMatcher.setInputOperator(cacheOperator);
cacheOperator.openAll();
keywordMatcher.open();
outputSchema = keywordMatcher.getOutputSchema();
} catch (Exception e) {
throw new DataFlowException(e.getMessage(), e);
}
cursor = OPENED;
}
use of edu.uci.ics.textdb.exp.keywordmatcher.KeywordPredicate in project textdb by TextDB.
the class DictionaryMatcher method getNextTuple.
@Override
public Tuple getNextTuple() throws TextDBException {
if (cursor == CLOSED) {
throw new DataFlowException(ErrorMessages.OPERATOR_NOT_OPENED);
}
if (resultCursor >= limit + offset - 1) {
return null;
}
Tuple sourceTuple;
while (true) {
// If there's result from current keywordMatcher, return it.
if ((sourceTuple = keywordMatcher.getNextTuple()) != null) {
resultCursor++;
if (resultCursor >= offset) {
return sourceTuple;
}
continue;
}
// return null if reach the end of dictionary.
if ((currentDictionaryEntry = predicate.getDictionary().getNextEntry()) == null) {
return null;
}
// Update the KeywordMatcher with the new dictionary entry.
keywordMatcher.close();
keywordPredicate = new KeywordPredicate(currentDictionaryEntry, predicate.getAttributeNames(), predicate.getAnalyzerString(), predicate.getKeywordMatchingType(), predicate.getSpanListName());
keywordMatcher = new KeywordMatcher(keywordPredicate);
keywordMatcher.setInputOperator(cacheOperator);
keywordMatcher.open();
}
}
use of edu.uci.ics.textdb.exp.keywordmatcher.KeywordPredicate in project textdb by TextDB.
the class SelectStatementTest method testSelectStatementBeansBuilder04.
/**
* Test the correctness of the generated beans by a SelectStatement with a
* ProjectAllFieldsPredicate and a KeywordExtractPredicate.
* Get a graph by calling getInternalPredicateBases() and getInternalLinkBeans()
* methods and check if the generated path form the node getInputNodeID() to
* the node getOutputNodeID() is correct. Also check whether getInputViews()
* is returning the correct dependencies.
*/
@Test
public void testSelectStatementBeansBuilder04() {
ProjectPredicate projectPredicate = new ProjectAllFieldsPredicate();
ExtractPredicate extractPredicate = new KeywordExtractPredicate(Arrays.asList("f1"), "keyword", KeywordMatchingType.CONJUNCTION_INDEXBASED.toString());
SelectStatement selectStatement = new SelectStatement("id", projectPredicate, extractPredicate, "source", null, null);
List<PredicateBase> expectedGeneratedBeans = Arrays.asList(new KeywordPredicate("keyword", Arrays.asList("f1"), null, KeywordMatchingType.CONJUNCTION_INDEXBASED, "id_e"));
List<String> dependencies = Arrays.asList("source");
Assert.assertEquals(selectStatement.getInputViews(), dependencies);
StatementTestUtils.assertGeneratedBeans(selectStatement, expectedGeneratedBeans);
}
use of edu.uci.ics.textdb.exp.keywordmatcher.KeywordPredicate in project textdb by TextDB.
the class KeywordExtractPredicateTest method testGeneratePredicateBase02.
/**
* Test the generatePredicateBase method.
* Build a KeywordExtractPredicate, invoke the generatePredicateBase and
* check whether a KeywordMatcherBean with the right attributes is returned.
* A list with some fields is used as the list of fields to perform the match.
*/
@Test
public void testGeneratePredicateBase02() {
String operatorId = "keywordExtract00";
List<String> matchingFields = Arrays.asList("field0", "field1");
String keywords = "xxx";
String matchingType = KeywordMatchingType.SUBSTRING_SCANBASED.toString();
KeywordExtractPredicate keywordExtractPredicate = new KeywordExtractPredicate(matchingFields, keywords, matchingType);
PredicateBase computedProjectionBean = keywordExtractPredicate.generateOperatorBean(operatorId);
PredicateBase expectedProjectionBean = new KeywordPredicate(keywords, matchingFields, null, KeywordMatchingType.fromName(matchingType), operatorId);
expectedProjectionBean.setID(operatorId);
Assert.assertEquals(expectedProjectionBean, computedProjectionBean);
}
use of edu.uci.ics.textdb.exp.keywordmatcher.KeywordPredicate in project textdb by TextDB.
the class KeywordExtractPredicateTest method testGeneratePredicateBase00.
/**
* Test the generatePredicateBase method.
* Build a KeywordExtractPredicate, invoke the generatePredicateBase and
* check whether a KeywordMatcherBean with the right attributes is returned.
* An empty list is used as the list of fields to perform the match.
*/
@Test
public void testGeneratePredicateBase00() {
String operatorId = "xxx";
List<String> matchingFields = Collections.emptyList();
String keywords = "keyword";
String matchingType = KeywordMatchingType.CONJUNCTION_INDEXBASED.toString();
KeywordExtractPredicate keywordExtractPredicate = new KeywordExtractPredicate(matchingFields, keywords, matchingType);
PredicateBase computedProjectionBean = keywordExtractPredicate.generateOperatorBean(operatorId);
PredicateBase expectedProjectionBean = new KeywordPredicate(keywords, matchingFields, null, KeywordMatchingType.fromName(matchingType), operatorId);
expectedProjectionBean.setID(operatorId);
Assert.assertEquals(expectedProjectionBean, computedProjectionBean);
}
Aggregations