您好我正在尝试计算具有5个单词的给定数组的句子之间的余弦相似性。所以我有一个asp.net项目,我在其中编写代码来计算文本中的前5个单词(按频率)大约50-60个句子)我在数组K中有这些单词。这里一切都很好。我想从文本中得到每个句子(这是我的问题中的一个输入,并且有一个文本区域inapp用户粘贴任何文本或文章)并建立了向量。例如; 让我们假设该数组
K={technology, product,player}
,给定的文字就是这个;
Apple Inc.是一家美国跨国科技公司 总部设在加利福尼亚州库比蒂诺,设计,开发和设计 销售消费电子产品,计算机软件和在线服务。 其硬件产品包括iPhone智能手机,iPad平板电脑 电脑,Mac个人电脑,iPod便携式媒体播放器, 和Apple Watch智能手表。 Apple的消费者软件包括 OS X和iOS操作系统,iTunes媒体播放器,Safari 网络浏览器,以及iLife和iWork的创造力和生产力 套房。其在线服务包括iTunes Store,iOS App 商店和Mac App Store,以及iCloud。
所以四个句子的四个向量应该是这样的
s1 = {1,0,0} s2 = {0,1,1} s3 = {0,0,1} s4 = {0,0,0}
如何在asp.net上建立这些载体?
答案 0 :(得分:0)
我正在使用以下SQL LIKE method和Print2DArray method。如果你绝对需要使用数组
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方法使“产品”成为“产品”的一个版本并提升计数器,但它也使“生产力”成为“产品”的一个版本。它将Apple Inc.分裂为一个句子。 您需要对此进行微调,因为它是您想要完成的非常基本的版本。您可以使用字符串和字符串数组,甚至是结构来更优雅地完成此操作,但是基础是一样的。
我来这里是为了进一步的问题!