我正在研究一个分类问题,根据使用Lucene API的培训数据将产品评论分类为正面,负面或中性.
我正在使用Review对象的ArrayList - "reviewList",它在抓取网页时存储每个评论的属性.
然后使用索引器索引包括"极性"和"评论内容"的评论属性.此后,基于索引对象,我需要对剩余的审阅对象进行分类.但是在执行此操作时,有一个查询对象,查询解析器在"审阅内容"中遇到EOF字符,因此终止.
导致错误的行已相应评论 -
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(" "); …Run Code Online (Sandbox Code Playgroud) 当我尝试在Lucene中搜索诸如"workaround/fix"之类的内容时,会抛出此错误:
org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'workaround/fix': Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix"
at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:131)
at pi.lucengine.LucIndex.main(LucIndex.java:112)
Caused by: org.apache.lucene.queryparser.classic.TokenMgrError: Lexical error at line 1, column 15. Encountered: <EOF> after : "/fix"
at org.apache.lucene.queryparser.classic.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1133)
at org.apache.lucene.queryparser.classic.QueryParser.jj_scan_token(QueryParser.java:599)
at org.apache.lucene.queryparser.classic.QueryParser.jj_3R_2(QueryParser.java:482)
at org.apache.lucene.queryparser.classic.QueryParser.jj_3_1(QueryParser.java:489)
at org.apache.lucene.queryparser.classic.QueryParser.jj_2_1(QueryParser.java:475)
at org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:226)
at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:181)
at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:170)
at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:121)
Run Code Online (Sandbox Code Playgroud)
这是我的第111和112行:
QueryParser parser = new QueryParser(Version.LUCENE_43, field, analyzer);
Query query = parser.parse(newLine);
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能让它解析"/"?
大多数关系数据库分四步处理JDBC/SQL查询:
我想知道"解析传入的查询"到底意味着什么?"计划/优化数据采集路径"是什么意思?
我是Lucene的新手并试图将原始字符串解析为Query使用QueryParser.
我想知道,为什么该QueryParser.Parse()方法需要一个Analyzer参数?
如果分析是某种与查询做,那么Analyzer应该定期处理时所指定Query的对象,以及(TermQuery,BooleanQuery等等),如果不是,为什么QueryParser需要它?
我已成功为Lucene实施捷克语引理器.我正在使用Solr对它进行测试,它在索引时非常适合.但是当用于查询时它不能很好地工作,因为查询解析器不向引理器提供任何上下文(前后的单词).
例如,pila vodu在索引时比在查询时不同地分析短语.它使用含糊不清的词pila,这可能意味着pila (看到例如电锯)或pít(动词的过去时"喝").
pila vodu - >
pít vodapila voda..所以pila找不到单词,也没有在文档片段中突出显示.
这个行为记录在solr wiki上(引用贝娄),我可以通过调试我的代码来确认它(只有孤立的字符串"pila"和"vodu"传递给引理器).
... Lucene QueryParser在向分析器提供任何文本之前在空白区域上进行标记,因此如果一个人搜索单词
sea biscit,分析器将单独给出单词"sea"和"biscit",...
是否有可能以某种方式更改,配置或调整查询解析器,以便引理器可以看到整个查询字符串,或者至少是单个单词的某些上下文?我想为dismax或edismax等不同的solr查询解析器提供解决方案.
我知道像"pila vodu"(引号)这样的短语查询没有这样的问题,但是如果没有确切的短语(例如带有"pilavíno"或甚至"pila dobrou vodu"的文档),我将丢失文档.
编辑 - 尝试解释/回答以下问题(谢谢@femtoRgon):
如果这两个术语不是一个短语,所以不一定会在一起,那么为什么要在上下文中对它们进行分析呢?
当然,最好只分析一起出现的术语.例如,在索引时,引理器检测输入文本中的句子,并且它仅一起分析来自单个句子的单词.但是如何在查询时实现类似的东西呢?实现我自己的查询解析器是唯一的选择吗?我很喜欢pf2和pf3的选项edismax解析器,我会在我自己的解析器的情况下,再次实施呢?
背后的想法实际上更深一点,因为即使对于具有相同词汇基础的词语,词形除法也在进行词义消歧.例如,这个词bow在英语中有大约7种不同的感官(参见维基百科),并且这种词义可以区分这种感官.所以我想利用这种潜力使搜索更加精确 - 只返回包含bow查询所需的具体意义上的单词的文档.所以我的问题可以扩展到:如何获得<lemma;sense>查询词的正确对?如果单词在其共同的上下文中呈现,则引理器通常能够分配正确的意义,但是当没有上下文时它就没有机会.
lucene solr lemmatization query-parser word-sense-disambiguation
我有一个Web应用程序,用户向Lucene索引提交查询.查询由Lucene解析
QueryParser.我学到了QueryParser非线程安全的困难方法.
是否更好地使用单个QueryParser实例,并同步调用其parse()方法?或者为每个查询构造一个新实例是否更好?(或者我可以通过一个QueryParsers 池更好地服务?)
我知道,一般来说,这样的问题取决于具体情况并需要剖析,但也许有人可以肯定地说" QueryParser建造"非常便宜/昂贵"?
有没有一种很好的方法来解析SQL语句以确保它只包含一个SELECT语句而没有其他内容?我正在使用C#,System.Data.SqlConnection和MS SQL Server