如何将句子的单词插入矩阵?

时间:2016-05-11 07:32:23

标签: asp.net string text vector

您好我正在尝试计算具有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上建立这些载体?

1 个答案:

答案 0 :(得分:0)

我正在使用以下SQL LIKE methodPrint2DArray 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.分裂为一个句子。 您需要对此进行微调,因为它是您想要完成的非常基本的版本。您可以使用字符串和字符串数组,甚至是结构来更优雅地完成此操作,但是基础是一样的。

我来这里是为了进一步的问题!