Estoy trabajando en un problema de clasificación para clasificar las evaluaciones de productos como positivas, negativas o neutrales según los datos de capacitación con la API de Lucene.Lucene: excepción - El analizador de consultas encontró <EOF> después de "alguna palabra"
Estoy usando un objeto ArrayList of Review - "reviewList" que almacena los atributos para cada revisión mientras rastrea las páginas web.
Los atributos de revisión que incluyen "polaridad" & "contenido de revisión" se indexan con el indexador. A partir de entonces, en función de los objetos de los índices, debo clasificar los objetos de revisión restantes. Pero al hacerlo, hay un objeto de revisión para el cual el analizador de consultas encuentra un carácter EOF en el "contenido de revisión" y, por lo tanto, termina.
El error causando línea se ha comentado en consecuencia -
IndexReader reader = IndexReader.open(FSDirectory.open(new File("index")));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_31);
QueryParser parser = new QueryParser(Version.LUCENE_31, "Review", analyzer);
int length = Crawler.reviewList.size();
for (int i = 200; i < length; i++) {
String true_class;
double r_stars = Crawler.reviewList.get(i).getStars();
if (r_stars < 2.0) {
true_class = "-1";
} else if (r_stars > 3.0) {
true_class = "1";
} else {
true_class = "0";
}
String[] reviewTokens = Crawler.reviewList.get(i).getReview().split(" ");
String parsedReview = "";
int j;
for (j = 0; j < reviewTokens.length; j++) {
if (reviewTokens[j] != null) {
if (!((reviewTokens[j].contains("-")) || (reviewTokens[j].contains("!")))) {
parsedReview += reviewTokens[j] + " ";
}
} else {
break;
}
}
Query query = parser.parse(parsedReview); // CAUSING ERROR!!
TopScoreDocCollector results = TopScoreDocCollector.create(5, true);
searcher.search(query, results);
ScoreDoc[] hits = results.topDocs().scoreDocs;
He analizado sintácticamente el texto manualmente para eliminar los caracteres que están causando el error, además de comprobar si la siguiente cadena es nula, pero ... el error persiste
Este es el error de seguimiento de pila -
Exception in thread "main" org.apache.lucene.queryParser.ParseException: Cannot parse 'I made the choice ... be all "thumbs ': Lexical error at line 1, column 938. Encountered: <EOF> after : "\"thumbs "
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:216)
at Sentiment_Analysis.Classification.classify(Classification.java:58)
at Sentiment_Analysis.Main.main(Main.java:17)
Caused by: org.apache.lucene.queryParser.TokenMgrError: Lexical error at line 1, column 938. Encountered: <EOF> after : "\"thumbs "
at org.apache.lucene.queryParser.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1229)
at org.apache.lucene.queryParser.QueryParser.jj_scan_token(QueryParser.java:1709)
at org.apache.lucene.queryParser.QueryParser.jj_3R_2(QueryParser.java:1598)
at org.apache.lucene.queryParser.QueryParser.jj_3_1(QueryParser.java:1605)
at org.apache.lucene.queryParser.QueryParser.jj_2_1(QueryParser.java:1585)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1280)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1266)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1313)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1266)
at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1226)
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:206)
... 2 more
Java Result: 1
favor me ayude a resolver este problema ... han sido golpeando mi cabeza con esto durante horas ahora!
Gracias a ton! Fue perfecto ...: D – Reema
Para aquellos que usan versiones más recientes (Lucene 4.6 para mí), la función 'escape' se ha movido a la clase' QueryParserUtil'. –
Quiero hacer esto usando la biblioteca solr en lugar de la biblioteca lucene, ¿alguna idea? –