283 votes

Comment calculer la similarité entre deux documents texte ?

Je cherche à travailler sur un projet NLP, dans n'importe quel langage de programmation (bien que Python soit ma préférence).

Je veux prendre deux documents et déterminer à quel point ils sont similaires.

7voto

shaurya uppal Points 542

Pour la similarité syntaxique Il peut y avoir 3 façons simples de détecter la similarité.

  • Word2Vec
  • Gant
  • Tfidf ou countvectorizer

Pour la similarité sémantique On peut utiliser l'incorporation BERT et essayer différentes stratégies de regroupement de mots pour obtenir l'incorporation du document, puis appliquer la similarité cosinus sur l'incorporation du document.

Une méthodologie avancée peut utiliser BERT SCORE pour obtenir la similarité. BERT SCORE

Lien vers le document de recherche : https://arxiv.org/abs/1904.09675

5voto

juk Points 88

Voici une petite application pour vous aider à démarrer...

import difflib as dl

a = file('file').read()
b = file('file1').read()

sim = dl.get_close_matches

s = 0
wa = a.split()
wb = b.split()

for i in wa:
    if sim(i, wb):
        s += 1

n = float(s) / float(len(wa))
print '%d%% similarity' % int(n * 100)

5voto

Pour trouver la similarité des phrases avec très peu de données et pour obtenir une grande précision, vous pouvez utiliser le package python ci-dessous qui utilise des modèles BERT pré-entraînés,

pip install similar-sentences

3voto

Mohammad-Ali Points 143

Si vous êtes plus intéressé par la mesure de la similarité sémantique de deux morceaux de texte, je vous suggère de jeter un coup d'oeil à ce projet gitlab . Vous pouvez l'exécuter en tant que serveur, il y a également un modèle préconstruit que vous pouvez utiliser facilement pour mesurer la similarité de deux morceaux de texte ; même s'il est principalement formé pour mesurer la similarité de deux phrases, vous pouvez toujours l'utiliser dans votre cas.il est écrit en java mais vous pouvez l'exécuter comme un service RESTful.

Une autre option est également Similitude DKPro qui est une bibliothèque contenant divers algorithmes pour mesurer la similarité des textes. Cependant, elle est également écrite en java.

exemple de code :

// this similarity measure is defined in the dkpro.similarity.algorithms.lexical-asl package
// you need to add that to your .pom to make that example work
// there are some examples that should work out of the box in dkpro.similarity.example-gpl 
TextSimilarityMeasure measure = new WordNGramJaccardMeasure(3);    // Use word trigrams

String[] tokens1 = "This is a short example text .".split(" ");   
String[] tokens2 = "A short example text could look like that .".split(" ");

double score = measure.getSimilarity(tokens1, tokens2);

System.out.println("Similarity: " + score);

2voto

Vous pouvez essayer ce service en ligne pour la similarité des documents en cosinus. http://www.scurtu.it/documentSimilarity.html

import urllib,urllib2
import json
API_URL="http://www.scurtu.it/apis/documentSimilarity"
inputDict={}
inputDict['doc1']='Document with some text'
inputDict['doc2']='Other document with some text'
params = urllib.urlencode(inputDict)    
f = urllib2.urlopen(API_URL, params)
response= f.read()
responseObject=json.loads(response)  
print responseObject

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X