similaridade, calcular pontuação de similaridade entre strings de texto, escritas em Java.
Similaridade, um kit de ferramentas de cálculo de similaridade, pode ser usado para cálculo de similaridade de texto, análise de sentimento, etc., escrito em Java.
Similaridade é uma versão Java do kit de ferramentas de cálculo de similaridade composto por uma série de algoritmos. O objetivo é difundir o método de cálculo de similaridade no processamento de linguagem natural. A similaridade tem como características ferramentas práticas, desempenho eficiente, estrutura clara, corpus atualizado e personalização.
A similaridade fornece a seguinte funcionalidade:
Cálculo de similaridade de palavras
Cálculo de similaridade de frase
Cálculo de similaridade de frases
Cálculo de similaridade de parágrafo
CNKI Yiyuan
análise de sentimento
Palavras aproximadas
Embora forneçam funções ricas, os módulos internos do Similarity insistem no baixo acoplamento, os modelos insistem no carregamento lento e os dicionários insistem na publicação em texto simples. Eles são fáceis de usar e ajudam os usuários a treinar seus próprios corpora.
Apresente o pacote Jar
< repositories >
< repository >
< id >jitpack.io</ id >
< url >https://jitpack.io</ url >
</ repository >
</ repositories >
< dependency >
< groupId >com.github.shibing624</ groupId >
< artifactId >similarity</ artifactId >
< version >1.1.6</ version >
</ dependency >
Introdução do gradle:
import org . xm . Similarity ;
import org . xm . tendency . word . HownetWordTendency ;
public class demo {
public static void main ( String [] args ) {
double result = Similarity . cilinSimilarity ( "电动车" , "自行车" );
System . out . println ( result );
String word = "混蛋" ;
HownetWordTendency hownetWordTendency = new HownetWordTendency ();
result = hownetWordTendency . getTendency ( word );
System . out . println ( word + " 词语情感趋势值:" + result );
}
}
Comprimento do texto: granularidade da palavra
Recomenda- se usar a similaridade Cilin: org.xm.Similarity.cilinSimilarity
, que é um método de cálculo de similaridade baseado em sinônimos Cilin
exemplo: src/test/java/org.xm/WordSimilarityDemo.java
package org . xm ;
public class WordSimilarityDemo {
public static void main ( String [] args ) {
String word1 = "教师" ;
String word2 = "教授" ;
double cilinSimilarityResult = Similarity . cilinSimilarity ( word1 , word2 );
double pinyinSimilarityResult = Similarity . pinyinSimilarity ( word1 , word2 );
double conceptSimilarityResult = Similarity . conceptSimilarity ( word1 , word2 );
double charBasedSimilarityResult = Similarity . charBasedSimilarity ( word1 , word2 );
System . out . println ( word1 + " vs " + word2 + " 词林相似度值:" + cilinSimilarityResult );
System . out . println ( word1 + " vs " + word2 + " 拼音相似度值:" + pinyinSimilarityResult );
System . out . println ( word1 + " vs " + word2 + " 概念相似度值:" + conceptSimilarityResult );
System . out . println ( word1 + " vs " + word2 + " 字面相似度值:" + charBasedSimilarityResult );
}
}
Comprimento do texto: granularidade da frase
Recomenda-se usar similaridade de frase: org.xm.Similarity.phraseSimilarity
, que é essencialmente um método para calcular a semelhança de duas frases por meio dos mesmos caracteres e das posições dos mesmos caracteres.
exemplo: src/test/java/org.xm/PhraseSimilarityDemo.java
public static void main ( String [] args ) {
String phrase1 = "继续努力" ;
String phrase2 = "持续发展" ;
double result = Similarity . phraseSimilarity ( phrase1 , phrase2 );
System . out . println ( phrase1 + " vs " + phrase2 + " 短语相似度值:" + result );
}
Comprimento do texto: granularidade da frase
Recomenda-se usar similaridade de sentença na forma e na ordem das palavras: org.xm.similarity.morphoSimilarity
, um método de similaridade que não apenas considera o mesmo texto literal de duas sentenças, mas também considera a ordem em que o mesmo texto aparece.
exemplo: src/test/java/org.xm/SentenceSimilarityDemo.java
public static void main ( String [] args ) {
String sentence1 = "中国人爱吃鱼" ;
String sentence2 = "湖北佬最喜吃鱼" ;
double morphoSimilarityResult = Similarity . morphoSimilarity ( sentence1 , sentence2 );
double editDistanceResult = Similarity . editDistanceSimilarity ( sentence1 , sentence2 );
double standEditDistanceResult = Similarity . standardEditDistanceSimilarity ( sentence1 , sentence2 );
double gregeorEditDistanceResult = Similarity . gregorEditDistanceSimilarity ( sentence1 , sentence2 );
System . out . println ( sentence1 + " vs " + sentence2 + " 词形词序句子相似度值:" + morphoSimilarityResult );
System . out . println ( sentence1 + " vs " + sentence2 + " 优化的编辑距离句子相似度值:" + editDistanceResult );
System . out . println ( sentence1 + " vs " + sentence2 + " 标准编辑距离句子相似度值:" + standEditDistanceResult );
System . out . println ( sentence1 + " vs " + sentence2 + " gregeor编辑距离句子相似度值:" + gregeorEditDistanceResult );
}
Comprimento do texto: granularidade do parágrafo (um parágrafo, 25 caracteres <comprimento(texto) <500 caracteres)
Recomenda-se usar a similaridade de frase na ordem das palavras: org.xm.similarity.text.CosineSimilarity
, um método que considera o mesmo texto em dois parágrafos, pondera-o por meio de segmentação de palavras, frequência de palavras e peso de classe gramatical, e usa cosseno para calcular a similaridade.
exemplo: src/test/java/org.xm/similarity/text/CosineSimilarityTest.java
@ Test
public void getSimilarityScore () throws Exception {
String text1 = "对于俄罗斯来说,最大的战果莫过于夺取乌克兰首都基辅,也就是现任总统泽连斯基和他政府的所在地。目前夺取基辅的战斗已经打响。" ;
String text2 = "迄今为止,俄罗斯的入侵似乎没有完全按计划成功执行——英国国防部情报部门表示,在乌克兰军队激烈抵抗下,俄罗斯军队已经损失数以百计的士兵。尽管如此,俄军在继续推进。" ;
TextSimilarity cosSimilarity = new CosineSimilarity ();
double score1 = cosSimilarity . getSimilarity ( text1 , text2 );
System . out . println ( "cos相似度分值:" + score1 );
TextSimilarity editSimilarity = new EditDistanceSimilarity ();
double score2 = editSimilarity . getSimilarity ( text1 , text2 );
System . out . println ( "edit相似度分值:" + score2 );
}
cos相似度分值:0.399143
edit相似度分值:0.0875
exemplo: src/test/java/org/xm/tendency/word/HownetWordTendencyTest.java
@ Test
public void getTendency () throws Exception {
HownetWordTendency hownet = new HownetWordTendency ();
String word = "美好" ;
double sim = hownet . getTendency ( word );
System . out . println ( word + ":" + sim );
System . out . println ( "混蛋:" + hownet . getTendency ( "混蛋" ));
}
Este exemplo é a análise de polaridade de sentimento granular de palavras baseada em árvores de semema. Em relação à análise de sentimento de texto, existe o pytextclassifier, que usa modelos de redes neurais profundas e algoritmos de classificação SVM para obter melhores resultados.
exemplo: src/test/java/org/xm/word2vec/Word2vecTest.java
@ Test
public void testHomoionym () throws Exception {
List < String > result = Word2vec . getHomoionym ( RAW_CORPUS_SPLIT_MODEL , "武功" , 10 );
System . out . println ( "武功 近似词:" + result );
}
@ Test
public void testHomoionymName () throws Exception {
String model = RAW_CORPUS_SPLIT_MODEL ;
List < String > result = Word2vec . getHomoionym ( model , "乔帮主" , 10 );
System . out . println ( "乔帮主 近似词:" + result );
List < String > result2 = Word2vec . getHomoionym ( model , "阿朱" , 10 );
System . out . println ( "阿朱 近似词:" + result2 );
List < String > result3 = Word2vec . getHomoionym ( model , "少林寺" , 10 );
System . out . println ( "少林寺 近似词:" + result3 );
}
O treinamento de vetores de palavras Word2vec é uma versão Java da ferramenta de treinamento word2vec Word2VEC_java. O corpus de treinamento é o romance Tian Long Ba Bu e os sinônimos são obtidos por meio de vetores de palavras. Os usuários podem treinar corpus personalizados ou usar a Wikipedia chinesa para treinar vetores de palavras universais.
Medida de similaridade de texto
O contrato de licenciamento é The Apache License 2.0, que é gratuito para uso comercial. Anexe um link de similaridade e um contrato de licença à descrição do produto.
O código do projeto ainda é muito rudimentar. Se você tiver alguma melhoria no código, sinta-se à vontade para enviá-lo de volta a este projeto. Antes de enviar, preste atenção aos dois pontos a seguir:
test
Você pode então enviar um PR.