📄 syntacticsimilarity.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ServiceRanking
{
public class SyntacticSimilarity
{
private static int[] _nameSimMeasures=new int[]{1, 2};
public SyntacticSimilarity()
{
//
// TODO: Add constructor logic here
//
}
private ArrayList DetermineConstituents(string str)
{
ArrayList constituents=new ArrayList() ;
Tokeniser tokenize = new Tokeniser();
string[] toks=tokenize.Partition(str);
foreach (string tok in toks)
constituents.Add(toks);
return constituents;
}
private float ComputeConstituentSimilarity(int measure, object text1, object text2)
{
if (text1 == null || text1 == null)
return 0.0F;
float sim=0.0F;
if (((string) text1).ToUpper().Equals(((string) text2).ToUpper()))
sim=1.0F;
else
switch (measure)
{
case 1:
sim=TextMatching.GetEditDistanceSimilarity((String) text1, (String) text2);
break;
case 2:
sim=TextMatching.GetTrigramSimilarity((String) text1, (String) text2);
break;
}
return sim;
}
public virtual float ComputeCombinedSimilarity(string elem1, string elem2)
{
try
{
if ((object) elem1 == null || (Object) elem2 == null
|| elem1 == string.Empty || elem2 == string.Empty
) return 0.0F;
string name1=elem1.ToLower();
string name2=elem2.ToLower();
if (name1.Equals(name2))
return 1.0F;
ArrayList tokens1=DetermineConstituents(elem1);
ArrayList tokens2=DetermineConstituents(elem2);
float synsim=ComputeConstituentSimilarity(3, elem1, elem2);
if (synsim >= 0.7F) return synsim;
//float bigramsim=TextMatching.GetBigramSimilarity(name1, name2) ;
if (tokens1 == null || tokens2 == null) return 0.0F;
int m=tokens1.Count;
int n=tokens2.Count;
float[][][] simCube=new float[_nameSimMeasures.Length][][];
for (int i=0; i < _nameSimMeasures.Length; i++)
{
simCube[i]=new float[m][];
for (int i2=0; i2 < m; i2++)
{
simCube[i][i2]=new float[n];
}
}
for (int j=0; j < m; j++)
{
String token1=((String) tokens1[j]).ToLower();
for (int k=0; k < n; k++)
{
String token2=((String) tokens2[k]).ToLower();
for (int i=0; i < _nameSimMeasures.Length; i++)
simCube[i][j][k]=ComputeConstituentSimilarity(_nameSimMeasures[i], token1, token2);
}
}
float[][] simMatrx=SimilarityCombiner.Aggregate(simCube, 1);
float comsim=SimilarityCombiner.ComputeSetSimilarity(simMatrx, 1);
return Math.Max(comsim, synsim);
}
catch(Exception )
{
return 0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -