Как перейти от сходства слов к общему сходству предложений

Я реализовал метод сходства предложений с использованием WS4J.

Я читал о сходстве предложений в статьях, которое основано на сходстве слов в двух предложениях. Но я не смог найти метод, который вычисляет и возвращает единственное значение для общего сходства предложений, основанного на сходствах слов.

Аналогичный вопрос задавался на этом веб-сайте по предложению-подобию-использованию-ws4j

Как вы можете видеть, мне удалось кодировать с помощью WS4J до такой степени, что любое слово в предложении a находит совпадение набора символов в другом предложении (и значение совпадения выше 0,9) возвращает сообщение о совпадении. Но это не очень хороший подход, я думаю.

Я нашел статью Yuhua et [2]. все очень полезно, но не может понять метод, который они использовали для общего сходства предложений.

public static String sentenceSim(String se1, String se2, RelatednessCalculator rc) {
        String similarityMessage = "";
        String similarityMessage2 = "";

        if (se1 == null || se2 == null) {
            return "null";
        }

        if (nlp == null) {
            nlp = OpenNLPSingleton.INSTANCE;
        }
        // long t00 = System.currentTimeMillis();
        String[] words1 = nlp.tokenize(se1); // base
        String[] words2 = nlp.tokenize(se2); // sentence
        String[] postag1 = nlp.postag(words1);
        String[] postag2 = nlp.postag(words2);


        String u = "";
        int matchCount = 0;     

        int counter = 0;
        String mLC = rc.toString().toLowerCase();
        for (int j = 0; j < words2.length; j++) { // sentence
            String pt2 = postag2[j];
            String w2 = MorphaStemmer.stemToken(words2[j].toLowerCase(), pt2);
            POS p2 = mapPOS(pt2);
            // System.out.print(words2[j]+"(POS "+pt2+")");
            for (int i = 0; i < words1.length; i++) { // base
                String pt1 = postag1[i];
                String origWord1 = words1[i];
                String origWord2 = words2[j];
                String w1 = MorphaStemmer.stemToken(words1[i].toLowerCase(), pt1);
                POS p1 = mapPOS(pt1);
                String popup = mLC + "( " + w1 + "#" + (p1 != null ? p1 : "INVALID_POS") + " , " + w2 + "#"
                        + (p2 != null ? p2 : "INVALID_POS") + ")";
                String dText;
                // boolean acceptable = rc.getPOSPairs().isAcceptable(p1, p2);

                // ALL WORDS FROM BASE HAS TO MATCH - IF ONE DOESNT,
                // THEN ITS NOT MATCH
                double d = -1;
                if (p1 != null && p2 != null) {//
                    double r = wordSim(w1, w2, rc);
                    if (r > 0.9) {
                        matchCount++;
                        similarityMessage += "\t\t Similarity Found (Base : sentence) ('Base Word: " + origWord1 + "=" + w1 + " "
                                + p1 + "', Sentence Word: '" + origWord2 + "=" + w2 + " " + p2 + "') =  " + r + "\n";
                        System.out.println(similarityMessage);
                    }
                }
            }
            // System.out.println();
        }

        // output if all words in sentence 1 have found matches in sentences 2
        if (matchCount == words1.length) {          
            similarityMessage2 = "\t\tFound all matches for base  in sentence: ";
            System.out.println("\t\tBase " + se1);
            System.out.println("\t\tFound all matches for base  in sentence: ");
            System.out.println(similarityMessage);
        }
        similarityMessage = "";
        return similarityMessage;
    } 

Я сделал свои коды на Java, поэтому я искал некоторые реализации Java.

[2]: Ли Й., Маклин Д., Бандар З.А., О'Шеа Д.Д. и Крокетт К. (2006). Сходство предложений на основе семантических сетей и корпусной статистики. Инженерия знаний и данных, IEEE Transactions on, 18(8), 1138-1150.

1 ответ

Существуют разные подходы для расчета сходства предложений, и этот подход может зависеть от вашего варианта использования или требований. Один из известных способов сделать это - рассмотреть наиболее важные синтаксические единицы в предложении, которые оказывают существенное влияние на значение предложения. (Например: глаголы, существительные, наречия, прилагательные и т. Д.). Кроме того, использование модели векторного пространства для вычисления сходства между двумя предложениями является достаточно точным методом, и в этой области имеется очень много ресурсов.

Другие вопросы по тегам