【问题标题】:How to insert words of sentences into a matrix?如何将句子的单词插入矩阵?
【发布时间】:2016-05-11 07:32:22
【问题描述】:

您好,我正在尝试计算包含 5 个单词的给定数组的句子之间的余弦相似度。所以我有一个 asp.net 项目,我在其中编写了代码来计算文本中的前 5 个单词(按频率)(大约 50-60 个句子),我在数组 K 中有这些单词。直到这里一切正常。我想从文本中获取每个句子(这是我的问题中的一个输入,并且应用程序中有一个文本区域,用户可以在其中粘贴任何内容文本或文章)并建立了向量。例如; 让我们假设数组

K={technology, product,player}

给定的文本是这样的;

Apple Inc. 是一家美国跨国科技公司 总部位于加利福尼亚州库比蒂诺,设计、开发和 销售消费电子产品、计算机软件和在线服务。 其硬件产品包括iPhone智能手机、iPad平板电脑 电脑、Mac 个人电脑、iPod 便携式媒体播放器、 和 Apple Watch 智能手表。苹果的消费者软件包括 OS X 和 iOS 操作系统、iTunes 媒体播放器、Safari Web 浏览器,以及 iLife 和 iWork 的创造力和生产力 套房。其在线服务包括 iTunes Store、iOS 应用 Store 和 Mac App Store,以及 iCloud。

所以四个句子的四个向量应该是这样的

s1={1,0,0} s2={0,1,1} s3={0,0,1} s4={0,0,0}

如何在 asp.net 上建立这些向量?

【问题讨论】:

    标签: asp.net string text vector


    【解决方案1】:

    我正在使用以下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 的方法使“products”成为“product”的一个版本,并且逆势而上,但它也使“productivity”成为“product”的一个版本。它将 Apple Inc. 拆分为一个句子。 您需要对此进行微调,因为它是您想要完成的非常基本的版本。 您可以使用字符串和 int 数组的字典,甚至是结构来更优雅地完成这项工作,但是基本都是一样的。

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

    【讨论】:

    • 首先,非常感谢您非常有帮助的回答。我应该将哪个库添加到我的代码中才能使用 Like 和 Print2DArray 方法?
    • 我已经使用 System.Data.Linq.SqlClient 将这些用于库;使用 System.Data.Linq;并且作为我使用的方法 if ( SqlMethods.Like(word, "%"+keywords[j]+"%")) this 但是我收到此错误消息“Method 'Boolean Like(System.String, System.String) ' 不能在客户端使用;它仅用于转换为 SQL。"
    • 当我使用它而不是 Like 它工作时,如果 (word.Contains (keywords[j]))
    • 我已经给出了包含上述方法的其他 stackoverflow 问题的链接(我的答案的第一行),但我没有想到 string.Contains() 。好主意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多