分析唯一句子并过滤它们的最佳算法?

时间:2015-06-24 16:13:00

标签: java algorithm sorting filter

我正在编写一些代码来将句子过滤到不同的组中。 句子是由我的服务台处理的事故单的描述形成的。

我必须根据5个catergories过滤它们;笔记本电脑,电话,网络,打印机,应用程序。

应用程序catergory的描述示例如下:“请在XXXX YYYYYYY笔记本电脑上安装CMS”

我知道要完美无瑕。但我想知道解决这个问题的最佳方法是什么?从示例中可以看出,它属于应用程序类别,但包含关键字“laptop”。

如果我能提供更多信息,请告诉我。每一点都有帮助。感谢

5 个答案:

答案 0 :(得分:0)

维护不同类别的不同列表或队列。 当您收到句子时,检查该句子中的关键字出现并添加/推送到适当的列表/队列。

您可以维护一张地图,告诉您哪个关键字的列表/队列。

答案 1 :(得分:0)

如果你只接受这些句子并发送/做逻辑, 为什么不用正则表达式过滤它们呢? 例如,见 Regex to find a specific word in a string in java

e.g。

List<String> LaptopList = new ArrayList<String>();
for (String item : sentenceList) {
    if item.matches(".*\\blaptop\\b.*"){
    LaptopList.add(item);
    }
}

答案 2 :(得分:0)

有趣的问题!如您的示例所示,同一个句子中可能有多个关键字,因此很难解读句子属于哪个类别。

为了解决这个问题,我建议可能为每个类别使用一个单独的优先级队列,按优先级顺序包含每个类别的关键字。

例如,您将拥有应用程序类别的关键字优先级队列,并且(在该优先级队列中)&#34;安装&#34;优先于&#34;笔记本电脑&#34;或&#34;计算机&#34;,因为&#34;安装&#34;与应用程序的关系比#34;笔记本电脑&#34;。

更紧密

在您选择句子属于哪个类别的算法中,我会对所有五个优先级队列进行循环搜索,直到找到匹配为止 - 所有五个类别中的最高优先级匹配都会使用该句子。这是我能想到的一种可能的解决方案。

注意:为了使其正常工作,当然重要的是要仔细挑选哪些关键字进入哪些类别;例如,在笔记本电脑类别中,拥有&#34;笔记本电脑&#34;是最高优先级的关键字 - 然而,这会导致很多冲突,因为笔记本电脑可能是句子中非常常用的单词。您应该拥有与每个类别相关的非常具体的关键字,而不是具有广泛/表面级别的关键字,例如&#34; laptop&#34; (或者&#34;笔记本电脑&#34;是一个非常低优先级的关键字)。

答案 3 :(得分:0)

这实际上是一个机器学习问题(文本分类),您可以使用几种算法解决这些问题:支持向量机,多项逻辑回归,朴素贝叶斯等。

有很多图书馆可以帮到你,这里有一个(java) http://alias-i.com/lingpipe/demos/tutorial/classify/read-me.html

python也有一个非常好的库: http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html#training-a-classifier

如果您想采用这种方法,您将需要一个训练数据集,这意味着您需要手动标记一组文档,算法将使用这些文档自动了解哪些关键字很重要。

希望它有所帮助!

答案 4 :(得分:0)

您正在查看关键字&#34;笔记本电脑&#34;。但是有一个关键字install&#34; install&#34;哪个主要讲述了一些应用程序的安装。

所以你可以试试

        if( sentence.contains("install") || (sentence.contains("install") && sentence.contains("laptop") ) 
        {          
        applicationTickets.add(sentence);
        }
        else if(sentence.contains("laptop") || other conditions)
        {            
        laptopTickets.add(sentence);
        }
        else if(       )
        ..........
        else if(       )
        ..........

如果您观察代码,则首先放置应用程序类别,因为它与笔记本电脑的条款匹配。因此,通过此代码尝试将该句子降为笔记本电脑类别。

您可以使用循环来检查所有条件。可以将关键字添加到每个类别的指定列表中。