diff --git a/cat/js/cat.js b/cat/js/cat.js
index 93bf02b..610edb7 100644
--- a/cat/js/cat.js
+++ b/cat/js/cat.js
@@ -97,7 +97,8 @@ function renderResult(data) {
markedSentence += htmlEncode(inputSentence.slice(lastInsertedEnd, fragment['matchedPatternStart']));
//the marked fragment
- markedSentence += ''+htmlEncode(inputSentence.slice(fragment['matchedPatternStart'], fragment['matchedPatternEnd']))+'';
+ var textFragment = htmlEncode(inputSentence.slice(fragment['matchedPatternStart'], fragment['matchedPatternEnd']));
+ markedSentence += ''+textFragment+'';
lastInsertedEnd = fragment['matchedPatternEnd'];
@@ -170,6 +171,25 @@ function displayDetails(caller, number) {
}
}
+function secondStepSearch(caller) {
+ var concordiaRequest = {
+ operation: 'simpleSearch',
+ tmId: currentTmId,
+ pattern:caller.innerHTML
+ }
+
+ $.ajax({
+ url: '/cat/concordia_gate.php',
+ type: 'post',
+ dataType: 'json',
+ success: function (data) {
+ console.log(data);
+ },
+ data: concordiaRequest
+ });
+
+}
+
function searchText(text, tmid) {
$("#search-input").val(text);
searchHandle(tmid);
diff --git a/concordia-server/unit_dao.cpp b/concordia-server/unit_dao.cpp
index 85370b3..a3c4709 100644
--- a/concordia-server/unit_dao.cpp
+++ b/concordia-server/unit_dao.cpp
@@ -69,7 +69,7 @@ std::vector UnitDAO::addAlignedSentences(
SimpleSearchResult UnitDAO::getSimpleSearchResult(const MatchedPatternFragment & fragment) {
SimpleSearchResult result(fragment.getStart(), fragment.getEnd());
TokenizedSentence ts("");
- return _getResultFromFragment(fragment, ts);
+ return _getResultFromFragment(fragment, ts, true);
}
CompleteConcordiaSearchResult UnitDAO::getConcordiaResult(boost::shared_ptr rawConcordiaResult) {
@@ -91,8 +91,14 @@ CompleteConcordiaSearchResult UnitDAO::getConcordiaResult(boost::shared_ptr params;
- params.push_back(new IntParam(2*sOccurence.getOffset()+1));
- params.push_back(new IntParam(2*(sOccurence.getOffset()+fragment.getMatchedLength())));
- params.push_back(new IntParam(sOccurence.getId()));
- PGresult * result = connection.execute(query, params);
- Logger::log("got examples");
- ExampleOccurence occurence(connection.getIntValue(result,0,0), // example id
- connection.getIntValue(result,0,3), // matched example start
- connection.getIntValue(result,0,4), // matched example end
- connection.getStringValue(result,0,1), // source segment
- connection.getStringValue(result,0,2)); // target segment
- connection.clearResult(result);
- BOOST_FOREACH (QueryParam * param, params) {
- delete param;
- }
-
- // now add all target fragments matched with this fragment
- std::string targetQuery = "SELECT target_token_pos, target_tokens[2*target_token_pos+1], target_tokens[2*target_token_pos+2] FROM unit INNER JOIN alignment ON alignment.unit_id = unit.id AND unit.id = $1::integer AND source_token_pos between $2::integer and $3::integer ORDER BY target_token_pos";
- std::vector targetParams;
- targetParams.push_back(new IntParam(sOccurence.getId()));
- targetParams.push_back(new IntParam(sOccurence.getOffset()));
- targetParams.push_back(new IntParam(sOccurence.getOffset() + fragment.getMatchedLength() - 1));
- PGresult * targetResult = connection.execute(targetQuery, targetParams);
- Logger::log("got target fragments");
-
- int prevPos = -2;
- int currStart = -1;
- int currEnd = -1;
-
- for (int i=0;i= 0) {
- occurence.addMatchedTargetFragment(std::pair(currStart,currEnd));
- }
- currStart = targetStart;
+ if (getOccurences) {
+ BOOST_FOREACH(SubstringOccurence sOccurence, fragment.getOccurences()) {
+ std::string query = "SELECT id, source_segment, target_segment, source_tokens[$1::integer], source_tokens[$2::integer] FROM unit WHERE id = $3::integer;";
+ std::vector params;
+ params.push_back(new IntParam(2*sOccurence.getOffset()+1));
+ params.push_back(new IntParam(2*(sOccurence.getOffset()+fragment.getMatchedLength())));
+ params.push_back(new IntParam(sOccurence.getId()));
+ PGresult * result = connection.execute(query, params);
+ Logger::log("got examples");
+ ExampleOccurence occurence(connection.getIntValue(result,0,0), // example id
+ connection.getIntValue(result,0,3), // matched example start
+ connection.getIntValue(result,0,4), // matched example end
+ connection.getStringValue(result,0,1), // source segment
+ connection.getStringValue(result,0,2)); // target segment
+ connection.clearResult(result);
+ BOOST_FOREACH (QueryParam * param, params) {
+ delete param;
}
- currEnd = targetEnd;
- prevPos = targetPos;
+ // now add all target fragments matched with this fragment
+ std::string targetQuery = "SELECT target_token_pos, target_tokens[2*target_token_pos+1], target_tokens[2*target_token_pos+2] FROM unit INNER JOIN alignment ON alignment.unit_id = unit.id AND unit.id = $1::integer AND source_token_pos between $2::integer and $3::integer ORDER BY target_token_pos";
+ std::vector targetParams;
+ targetParams.push_back(new IntParam(sOccurence.getId()));
+ targetParams.push_back(new IntParam(sOccurence.getOffset()));
+ targetParams.push_back(new IntParam(sOccurence.getOffset() + fragment.getMatchedLength() - 1));
+ PGresult * targetResult = connection.execute(targetQuery, targetParams);
+ Logger::log("got target fragments");
+
+ int prevPos = -2;
+ int currStart = -1;
+ int currEnd = -1;
+
+ for (int i=0;i= 0) {
+ occurence.addMatchedTargetFragment(std::pair(currStart,currEnd));
+ }
+ currStart = targetStart;
+ }
+
+ currEnd = targetEnd;
+ prevPos = targetPos;
+ }
+
+ // check if there are remaining fragments
+ if (currStart >= 0) {
+ occurence.addMatchedTargetFragment(std::pair(currStart,currEnd));
+ }
+
+ connection.clearResult(targetResult);
+ BOOST_FOREACH (QueryParam * param, targetParams) {
+ delete param;
+ }
+
+ ssResult.addOccurence(occurence);
+
}
-
- // check if there are remaining fragments
- if (currStart >= 0) {
- occurence.addMatchedTargetFragment(std::pair(currStart,currEnd));
- }
-
- connection.clearResult(targetResult);
- BOOST_FOREACH (QueryParam * param, targetParams) {
- delete param;
- }
-
- ssResult.addOccurence(occurence);
-
}
-
connection.endTransaction();
return ssResult;
diff --git a/concordia-server/unit_dao.hpp b/concordia-server/unit_dao.hpp
index edf87ee..174ecc0 100644
--- a/concordia-server/unit_dao.hpp
+++ b/concordia-server/unit_dao.hpp
@@ -52,6 +52,11 @@ private:
const MatchedPatternFragment & fragment,
const TokenizedSentence & tokenizedPattern);
+ SimpleSearchResult _getResultFromFragment(
+ const MatchedPatternFragment & fragment,
+ const TokenizedSentence & tokenizedPattern,
+ bool getOccurences);
+
std::vector _getTokenPositions(const TokenizedSentence & ts);
int _addSingleSentence(