有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是分析和过滤独特句子的最佳算法?

我正在编写一些代码,把句子过滤成不同的组。 这些句子是由我的服务台处理过的事件记录单的描述组成的

我必须根据5个类别对它们进行过滤;笔记本电脑、电话、网络、打印机、应用程序

应用程序目录中的一个描述示例是:“请在XXXX YYYY笔记本电脑上安装CMS”

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

如果有更多的信息我可以提供给你,请让我知道。积少成多。谢谢


共 (5) 个答案

  1. # 1 楼答案

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

    有很多库可以帮助您,这里有一个(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

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

    希望有帮助

  2. # 2 楼答案

    为不同类别维护不同的列表或队列。 收到句子后,检查该句子中是否出现关键字,并添加/推送到相应的列表/队列

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

  3. # 3 楼答案

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

    为了避免这种情况,我建议可能对每个类别使用单独的优先级队列,按照优先级顺序为每个类别包含关键字

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

    在你选择一个句子属于哪个类别的算法中,我会在所有五个优先级队列中进行循环搜索,直到找到匹配项——所有五个类别中优先级最高的匹配项会得到这个句子。这是我能想到的一个可能的解决办法

    注意:为了让它正常工作,当然重要的是要仔细挑选哪些关键词进入哪些类别;例如,在膝上型电脑类别中,将“膝上型电脑”作为优先级最高的关键字似乎是很自然的,但是,这会导致很多冲突,因为膝上型电脑可能是句子中非常常用的一个词。您应该拥有与每个类别相关的非常特定的关键字,而不是像“laptop”(或者“laptop”是一个非常低优先级的关键字)这样的宽泛/表面级关键字

  4. # 4 楼答案

    如果你只能通过接收这些句子和发送/执行逻辑来达到目的, 为什么不直接用正则表达式过滤它们呢? 比如说,, Regex to find a specific word in a string in java

    例如

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

    你看到的是关键词“笔记本电脑”。但有一个关键字install“install”,它主要讲述一些应用程序的安装

    所以你可以试试看

            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(       )
            ..........
    

    如果您遵守代码,应用程序类别将放在第一位,因为它与膝上型电脑的术语相匹配。通过这段代码,我们试图把这句话归入笔记本电脑的范畴

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