2012-04-21 6 views
14

के बाद हुआ था, मैं लुसीन एपीआई का उपयोग करके प्रशिक्षण डेटा के अनुसार उत्पाद समीक्षाओं को सकारात्मक, नकारात्मक या तटस्थ के रूप में वर्गीकृत करने के लिए वर्गीकरण समस्या पर काम कर रहा हूं।लुसीन: अपवाद - क्वेरी पार्सर का सामना <EOF> "कुछ शब्द"

मैं समीक्षा वस्तुओं की एक ऐरेलिस्ट का उपयोग कर रहा हूं - "समीक्षा सूची" जो वेब पृष्ठों को क्रॉल करते समय प्रत्येक समीक्षा के लिए गुणों को संग्रहीत करती है।

समीक्षा विशेषताएँ जिनमें "polarity" & "समीक्षा सामग्री" शामिल है, को इंडेक्सर का उपयोग करके अनुक्रमित किया जाता है। इसके बाद, इंडेक्स ऑब्जेक्ट्स के आधार पर, मुझे शेष समीक्षा ऑब्जेक्ट्स को वर्गीकृत करने की आवश्यकता है। लेकिन ऐसा करने पर, एक समीक्षा वस्तु होती है जिसके लिए क्वेरी पार्सर "समीक्षा सामग्री" में एक ईओएफ चरित्र का सामना कर रहा है, और इसलिए समाप्त हो रहा है।

लाइन के कारण त्रुटि तदनुसार टिप्पणी की गई है -

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; 

मैं अक्षर हैं जो अलग पता चल सके कि अगले स्ट्रिंग शून्य है से त्रुटि पैदा कर रहे हैं, दूर करने के लिए पाठ मैन्युअल पार्स है ... लेकिन त्रुटि बनी हुई है।

यह वह जगह है त्रुटि स्टैक ट्रेस -

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 

कृपया मेरी मदद इस समस्या का समाधान ... अब घंटों के लिए इस के साथ मेरे सिर की पिटाई कर रहे हैं!

उत्तर

28

आप

Query query = parser.parse(QueryParser.escape(parsedReview)); 

QueryParser.escape जावाडोक के रूप में सुझाव दिया के माध्यम से दोहरे उद्धरण और अन्य विशेष वर्ण से बचें चाहिए,

एक स्ट्रिंग जहां उन अक्षरों कि QueryParser उम्मीद भाग निकले सहायता से निकले कर रहे हैं होने के लिए रिटर्न एक पिछले '\'।

+1

धन्यवाद एक टन! यह स्थान पर था ..: डी – Reema

+1

जो लोग हालिया रिलीज (मेरे लिए ल्यूसीन 4.6) का उपयोग करते हैं, उनके लिए 'एस्केप' फ़ंक्शन को 'QueryParserUtil' कक्षा में ले जाया गया है। –

+1

मैं इसे ल्यूसीन लाइब्रेरी के बजाय सोलर लाइब्रेरी का उपयोग करना चाहता हूं, कोई विचार? –

2

मैं इस समस्या को पहचानता हूं।

WHERE घोषित करने से पहले टेराडाटा में ठीक काम करता है, लेकिन पार्सिंग के दौरान त्रुटि उत्पन्न करता है।

WHERE घोषणा के बाद GROUP BY घोषणा को ठीक करने के लिए।

संबंधित मुद्दे