⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntacticsimilarity.cs

📁 In the previous article, we presented an approach for capturing similarity between words that was co
💻 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 + -