你好,我正在尝试计算由5个单词组成的给定数组的句子之间的余弦相似度。因此,我有一个asp.net项目,我编写了代码来计算文本(大约50-60个句子)中的前5个单词(按频率),我把这些单词放在数组K中。直到这里一切都好了。我想从文本中获得每个句子(这是我问题中的一个输入,在应用程序中有一个文本区域,用户可以在其中粘贴任何文本或文章),并建立向量。例如假设阵列
K={technology, product,player}
给定的文本是这样的;
苹果股份有限公司是一家美国跨国科技公司总部位于加利福尼亚州库比蒂诺,设计、开发和销售消费电子产品、计算机软件和在线服务。其硬件产品包括iPhone智能手机、iPad平板电脑计算机、Mac个人计算机、iPod便携式媒体播放器,以及Apple Watch智能手表。苹果的消费者软件包括OS X和iOS操作系统、iTunes媒体播放器、Safari网络浏览器,以及iLife和iWork的创造力和生产力套房。其在线服务包括iTunes Store、iOS应用程序Store和Mac应用商店,以及iCloud。
所以四个句子的四个向量应该像这个
s1={1,0,0}s2={0,1,1}s3={0,0,1}s s4={,0,0}
如何在asp.net上建立这些向量?
我正在使用以下SQL LIKE方法和Print2DArray方法。如果你绝对需要使用阵列
public static void Main(string[] args)
{
string[] keywords = {...}; // your keywords
string text = "..."; // your text
string[] textInArray = text.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
int[,] vectors = new int[textInArray.Length, keywords.Length];
for (int i = 0; i < textInArray.Length; i++)
{
string[] words = textInArray[i].Split(' ');
for (int j = 0; j < keywords.Length; j++)
{
foreach (var word in words)
{
if (Like(word, "%"+keywords[j]+"%"))
{
vectors[i, j]++;
}
}
}
}
Print2DArray(vectors);
}
请记住,我使用的类似SQL的方法使"products"成为"product"的一个版本,并使计数器递增,但它也使"生产力"成为"产品"的一种版本。它将苹果股份有限公司拆分为一句话您需要对此进行微调,因为它是您想要实现的非常基本的版本您可以使用字符串和int数组的字典,甚至使用结构来更优雅地完成这项工作,但基本原理是一样的。
我来这里是为了回答更多的问题!