# similarity
用于词语、短语、句子、词法分析、情感分析、语义分析等相关的相似度计算。
**similarity**是由一系列算法组成的Java版相似度计算工具包,目标是传播自然语言处理中相似度计算方法。**similarity**具备工具实用、性能高效、架构清晰、语料时新、可自定义的特点。
**similarity**提供下列功能:
> * 词语相似度计算
* 词林编码法相似度
* 汉语语义法相似度
* 知网词语相似度
* 字面编辑距离法
> * 短语相似度计算
* 简单短语相似度
> * 句子相似度计算
* 词性和词序结合法
* 编辑距离算法
* Gregor编辑距离法
* 优化编辑距离法
> * 文本相似度计算
* 余弦相似度
* 编辑距离算法
* 欧几里得距离
* Jaccard相似性系数
* Jaro距离
* Jaro–Winkler距离
* 曼哈顿距离
* SimHash + 汉明距离
* Sørensen–Dice系数
> * 词法分析
* xmnlp中文分词
* 分词词性标注
* 词频统计
> * 知网义原
* 义原树
> * 情感分析
* 正面倾向程度
* 负面倾向程度
* 情感倾向性
> * 近似词
* word2vec
在提供丰富功能的同时,**similarity**内部模块坚持低耦合、模型坚持惰性加载、词典坚持明文发布,使用方便,帮助用户训练自己的语料。
------
## demo
https://www.borntowin.cn/product/word_emb_sim
------
## Todo
文本相似性度量
- [x] 关键词匹配(TF-IDF、BM25)
- [x] 浅层语义匹配(WordEmbed隐语义模型,用word2vec或glove词向量直接累加构造的句向量)
- [ ] 深度语义匹配模型(DSSM、CLSM、DeepMatch、MatchingFeatures、ARC-II、DeepMind,具体依次参考下面的Reference)
欢迎大家贡献代码及思路,完善本项目
------
## jar包
- 离线jar包
[similarity-1.1.3-jar-with-dependencies.jar](./data/similarity-1.1.3-jar-with-dependencies.jar)
[similarity-1.1.3.jar](./data/similarity-1.1.3.jar)
下载其中一个,置于项目`Libraries`下,这样加入到项目依赖即可。
```
由于maven官方库包上传需要审核校对,着实耗时,现提供离线版jar包,方便使用。后续可以切换到maven官方库调用。
```
- Maven官方库(未上传,暂不可用)
```
<dependency>
<groupId>io.github.shibing624</groupId>
<artifactId>similarity</artifactId>
<version>1.1.3</version>
</dependency>
```
import
```
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);
}
}
```
## Usage
### word similarity
```
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);
}
```
demo code position: test/java/org.xm/WordSimilarityDemo.java
* result:
![word_sim result](./data/pic/word_sim.png)
### phrase similarity
```
public static void main(String[] args) {
String phrase1 = "继续努力";
String phrase2 = "持续发展";
double result = Similarity.phraseSimilarity(phrase1, phrase2);
System.out.println(phrase1 + " vs " + phrase2 + " 短语相似度值:" + result);
}
```
demo code position: test/java/org.xm/PhraseSimilarityDemo.java
* result:
![phrase sim result](./data/pic/phrase_sim.png)
### sentence similarity
```
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);
}
```
demo code position: test/java/org.xm/SentenceSimilarityDemo.java
* result:
![sentence sim result](./data/pic/sentence_sim.png)
### text similarity
```
@Test
public void getSimilarityScore() throws Exception {
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity similarity = new CosineSimilarity();
double score1pk2 = similarity.getSimilarity(text1, text2);
double score1pk3 = similarity.getSimilarity(text1, text3);
double score2pk2 = similarity.getSimilarity(text2, text2);
double score2pk3 = similarity.getSimilarity(text2, text3);
double score3pk3 = similarity.getSimilarity(text3, text3);
System.out.println(text1 + " 和 " + text2 + " 的相似度分值:" + score1pk2);
System.out.println(text1 + " 和 " + text3 + " 的相似度分值:" + score1pk3);
System.out.println(text2 + " 和 " + text2 + " 的相似度分值:" + score2pk2);
System.out.println(text2 + " 和 " + text3 + " 的相似度分值:" + score2pk3);
System.out.println(text3 + " 和 " + text3 + " 的相似度分值:" + score3pk3);
}
```
demo code position: test/java/org.xm/similarity/text/CosineSimilarityTest.java
* result:
![cos text result](./data/pic/cos_txt.png)
### word frequency statistics
demo code position: test/java/org.xm/tokenizer/WordFreqStatisticsTest.java
* result:
![word freq result](./data/pic/freq.png)
分词及词性标注内置调用[HanLP](https://github.com/hankcs/HanLP),也可以使用我们NLPchina的[ansj_seg](https://github.com/NLPchina/ansj_seg)分词工具。
### sentiment analysis based on words
```
@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("混蛋"));
}
```
demo code position: test/java/org.xm/tendency.word/HownetWordTendencyTest.java
* result:
![tendency result](./data/pic/tendency.png)
本例是基于义原树的词语粒度情感极性分析,关于文本情感分析有[text-classifier](https://github.com/shibing624/text-classifier),利用深度神经网络模型、SVM分类算法实现的效果更好。
### homoionym(use word2vec)
```
@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 Ex
没有合适的资源?快使用搜索试试~ 我知道了~
相似度:相似度:相似度计算工具包,java编写。用于词,短语,句子,词法分析,情感分析,语义分析等相关的相似度计算
共145个文件
java:103个
txt:17个
png:9个
需积分: 50 22 下载量 18 浏览量
2021-02-03
15:22:33
上传
评论 1
收藏 22.45MB ZIP 举报
温馨提示
相似 适用词,语法,句子,词法分析,情感分析,语义分析等相关的相似度计算。 相似度是由一系列算法组成的Java版相似度计算工具包,目标是传播自然语言处理中相似度计算方法。相似度是工具实用,性能高效,架构清晰,语料时新,可自定义的特点。 相似性提供下列功能: 词相似度计算 词林编码法相似度 汉语语义法相似度 知网词相似度 字面编辑距离法 初步相似度计算 简单而言相似度 句子相似度计算 词性和词序结合法 编辑距离算法 Gregor编辑距离法 优化编辑距离法 文本相似度计算 余弦相似度 编辑距离算法 欧几里得距离 雅卡德相似性系数 Jaro距离 Jaro–Winkler距离 曼哈顿距离 SimHash +汉明距离 Sørensen–Dice系数 词法分析 xmnlp中文分词 分词词性标注 词频统计 知网义原 义原树 情感分析 正面实力程度 明显潜力程度 情感倾向性 近似词 word2vec 在提供丰富功能的同时,相似性内部模块坚持低耦合,模型坚持惰性加载,词典坚持明文发布,使用方便,帮助用户培训自己的语料。 演示 去做 文本相似性指标 关键词匹配(TF-IDF,BM25) 浅层语义匹配(
资源详情
资源评论
资源推荐
收起资源包目录
相似度:相似度:相似度计算工具包,java编写。用于词,短语,句子,词法分析,情感分析,语义分析等相关的相似度计算 (145个子文件)
concept.dat 3.96MB
sememe.dat 90KB
.gitignore 78B
concept.xml.gz 779KB
cilin.db.gz 553KB
sememe.xml.gz 27KB
similarity-1.1.3-jar-with-dependencies.jar 15.26MB
similarity-1.1.3.jar 3.14MB
XmlUtils.java 19KB
Learn.java 13KB
ConceptSimilarity.java 12KB
ConceptParser.java 9KB
StringUtil.java 8KB
SimHashPlusHammingDistanceTextSimilarity.java 8KB
ModelParser.java 7KB
Concept.java 6KB
JaroDistanceTextSimilarity.java 6KB
SemanticSimilarity.java 6KB
Training.java 6KB
EuclideanDistanceTextSimilarity.java 5KB
ManhattanDistanceTextSimilarity.java 5KB
TextSimilarity.java 5KB
Similarity.java 5KB
MorphoSimilarity.java 5KB
WordFreqStatistics.java 4KB
GregorEditDistanceSimilarity.java 4KB
SememeSimilarity.java 4KB
NewEditDistanceSimilarity.java 4KB
JaccardTextSimilarity.java 4KB
Variable.java 4KB
PinyinDictionary.java 4KB
JaroWinklerDistanceTextSimilarity.java 4KB
Tokenizer.java 4KB
WordSimilarityDemo.java 3KB
DiceTextSimilarity.java 3KB
WordKmeans.java 3KB
Block.java 3KB
EditDistance.java 3KB
Split.java 3KB
CosineSimilarity.java 3KB
EditDistanceSimilarity.java 3KB
SememeParser.java 3KB
HownetWordTendency.java 3KB
CilinDictionary.java 3KB
Sememe.java 3KB
NaiveBayesClassifier.java 3KB
SuperString.java 3KB
Word.java 2KB
PinyinDictionaryTest.java 2KB
IHownetMeta.java 2KB
CharBasedSimilarity.java 2KB
CilinCode.java 2KB
AtomicFloat.java 2KB
StandardEditDistanceSimilarity.java 2KB
Feature.java 2KB
Word2vecTest.java 2KB
Word2vec.java 2KB
FileUtil.java 2KB
WordNeuron.java 2KB
PhraseSimilarity.java 2KB
CilinSimilarity.java 2KB
Instance.java 2KB
WordEditUnit.java 1KB
SememeType.java 1KB
EditDistanceSimilarityTest.java 1KB
ChunkEditUnit.java 1KB
CosineSimilarityTest.java 1KB
StringUtilTest.java 1KB
SentenceSimilarityDemo.java 1KB
ConceptTest.java 1KB
ITextSimilarity.java 1KB
EditUnit.java 1KB
PinyinSimilarity.java 1KB
MorphoSimilarityTest.java 1KB
ModelParserTest.java 1010B
XmlException.java 985B
CharBasedSimilarityTest.java 958B
Huffman.java 945B
VecMap.java 922B
DicReader.java 921B
WordFreqStatisticsTest.java 907B
ConceptSimilarityTest.java 891B
StandardEditDistanceSimilarityTest.java 792B
LearnTest.java 790B
CilinDictionaryTest.java 717B
EditDistance.java 682B
CilinSimilarityTest.java 670B
GregorEditDistanceSimilarityTest.java 651B
FileSegmentStatisticsDemo.java 618B
Neuron.java 570B
NewEditDistanceSimilarityTest.java 560B
WordEntry.java 553B
ConceptLinkedList.java 529B
SemanticSimilarityTest.java 516B
MathUtilTest.java 497B
HownetWordTendencyTest.java 443B
TokenizerTest.java 416B
TendencyDemo.java 415B
PinyinSimilarityTest.java 407B
IWordTendency.java 396B
共 145 条
- 1
- 2
LunaKnight
- 粉丝: 31
- 资源: 4705
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0