blob: 0e8d74387e4051f485e755d82b60c501e93bbc1f [file] [log] [blame]
package opennlp.tools.similarity.apps.solr;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import opennlp.tools.similarity.apps.HitBase;
import opennlp.tools.similarity.apps.RelatedSentenceFinder;
import opennlp.tools.similarity.apps.RelatedSentenceFinderML;
import opennlp.tools.similarity.apps.utils.Pair;
import opennlp.tools.textsimilarity.ParseTreeChunk;
import opennlp.tools.textsimilarity.ParseTreeChunkListScorer;
import opennlp.tools.textsimilarity.SentencePairMatchResult;
import opennlp.tools.textsimilarity.chunker2matcher.ParserChunker2MatcherProcessor;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.CachingWrapperFilter;
import org.apache.lucene.search.Collector;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.ScoreDoc;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.component.SearchHandler;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
public class ContentGeneratorRequestHandler extends SearchHandler {
private static Logger LOG = Logger
.getLogger("com.become.search.requestHandlers.SearchResultsReRankerRequestHandler");
private ParserChunker2MatcherProcessor sm = null;
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp){
String query = req.getParams().get("q");
LOG.info(query);
String[] runCommand = new String[12], runInternal = new String[8];
runCommand[0] = "java";
runCommand[1] = "-Xmx1g";
runCommand[2] = "-jar";
runCommand[3] = "pt.jar";
runCommand[4] = "\""+query+"\"";
runCommand[5] = req.getParams().get("email");
runCommand[6] = req.getParams().get("resourceDir");
runCommand[7] = req.getParams().get("stepsNum");
runCommand[8] = req.getParams().get("searchResultsNum");
runCommand[9] = req.getParams().get("relevanceThreshold");
runCommand[10] = req.getParams().get("lang");
runCommand[11] = req.getParams().get("bingKey");
for(int i= 0; i<8; i++){
runInternal[i] = runCommand[i+4];
}
String resultText = null;
try {
resultText = cgRunner(runInternal);
} catch (Exception e1) {
/*
Runtime r = Runtime.getRuntime();
Process mStartProcess = null;
String workDir = req.getParams().get("workDir");
if (workDir == null)
System.err.println("workDir = null");
try {
mStartProcess = r.exec(runCommand, null, new File(workDir));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StreamLogger outputGobbler = new StreamLogger(mStartProcess.getInputStream());
outputGobbler.start();
}
*/
}
NamedList<Object> values = rsp.getValues();
values.remove("response");
values.add("response", "We completed your request to write an essay on '"+query+"' and sent you an email at "+ runCommand[5]);
values.add("text", resultText);
rsp.setAllValues(values);
}
class StreamLogger extends Thread{
private InputStream mInputStream;
public StreamLogger(InputStream is) {
this.mInputStream = is;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(mInputStream);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
public String cgRunner(String[] args) {
ParserChunker2MatcherProcessor sm = null;
int count=0;
for(String a: args){
System.out.print(count+" >> " + a);
count++;
}
try {
String resourceDir = args[2];
if (resourceDir!=null)
sm = ParserChunker2MatcherProcessor.getInstance(resourceDir);
else
sm = ParserChunker2MatcherProcessor.getInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String bingKey = args[7];
if (bingKey == null){
bingKey = //"e8ADxIjn9YyHx36EihdjH/tMqJJItUrrbPTUpKahiU0=";
"xdnRVcVf9m4vDvW1SkTAz5kS5DFYa19CrPYGelGJxnc";
}
RelatedSentenceFinder f = null;
String lang = args[6];
if (lang.startsWith("es")){
f = new RelatedSentenceFinderML(Integer.parseInt(args[3]), Integer.parseInt(args[4]), Float.parseFloat(args[5]), bingKey);
f.setLang(lang);
} else
if (args.length>4 && args[4]!=null)
f = new RelatedSentenceFinder(Integer.parseInt(args[3]), Integer.parseInt(args[4]), Float.parseFloat(args[5]), bingKey);
else
f = new RelatedSentenceFinder();
String generatedContent = null;
List<HitBase> hits = null;
try {
hits = f.generateContentAbout(args[0].replace('+', ' ').replace('"', ' ').trim());
System.out.println(HitBase.toString(hits));
generatedContent = HitBase.toResultantString(hits);
opennlp.tools.apps.utils.email.EmailSender s = new opennlp.tools.apps.utils.email.EmailSender();
try {
s.sendMail("smtp.rambler.ru", "bg7550@rambler.ru", "pill0693", new InternetAddress("bg7550@rambler.ru"), new InternetAddress[]{new InternetAddress(args[1])}, new InternetAddress[]{}, new InternetAddress[]{},
"Generated content for you on '"+args[0].replace('+', ' ')+"'", generatedContent, null);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
try {
s.sendMail("smtp.rambler.ru", "bg7550@rambler.ru", "pill0693", new InternetAddress("bg7550@rambler.ru"), new InternetAddress[]{new InternetAddress(args[1])}, new InternetAddress[]{}, new InternetAddress[]{},
"Generated content for you on '"+args[0].replace('+', ' ')+"'", generatedContent, null);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return generatedContent;
}
}
/*
http://173.255.254.250:8983/solr/contentgen/?q=human+body+anatomy&email=bgalitsky@hotmail.com&resourceDir=/home/solr/solr-4.4.0/example/src/test/resources&workDir=/home/solr/solr-4.4.0/example/solr-webapp/webapp/WEB-INF/lib&stepsNum=20&searchResultsNum=10&relevanceThreshold=1.5
*/