主要内容

bagOfWords

Bag-of-words模型

描述

单词袋模型(也称为词频计数器)记录单词在集合的每个文档中出现的次数。

bagOfWords不将文本拆分为单词。要创建标记化文档的数组,请参见tokenizedDocument

创建

描述

= bagOfWords创建一个空的词袋模型。

例子

= bagOfWords (文档)中出现的单词数文档并返回一个单词袋模型。

例子

= bagOfWords (uniqueWords,计数)使用in中的单词创建单词袋模型uniqueWords对应的频率也算进去了计数

输入参数

全部展开

输入文档,指定为tokenizedDocument数组,单词的字符串数组,或字符向量的单元格数组。如果文档不是一个tokenizedDocument数组,那么它必须是一个行向量,表示一个single文档,其中每个元素都是一个单词。要指定多个文档,请使用tokenizedDocument数组中。

唯一的单词列表,指定为字符串向量或字符向量的单元格数组。如果uniqueWords包含< >失踪,那么该函数将忽略缺失的值。的大小uniqueWords必须是1 -V其中V是的列数计数

例子:["一个"“例子”“列表”]

数据类型:字符串|细胞

对应的单词的频率计数uniqueWords,指定为一个非负整数的矩阵。的值计数(i, j)对应于单词出现的次数uniqueWords (j)出现在文档。

计数必须有元素个数(uniqueWords)列。

属性

全部展开

每个文档的字数,指定为稀疏矩阵。

所见文档的数量,指定为非负整数。

模型中唯一单词的个数,指定为非负整数。

模型中唯一的单词,指定为string向量。

数据类型:字符串

对象的功能

编码 将文档编码为word或n-gram计数的矩阵
tfidf Term Frequency - inverse Document Frequency (tf-idf)矩阵
topkwords 词袋模型或LDA主题中最重要的词
addDocument 将文档添加到单词袋或n-grams袋模型中
removeDocument 从单词袋或n-grams袋模型中移除文档
removeEmptyDocuments 从标记化文档数组、单词包模型或n-grams包模型中删除空文档
removeWords 从文档或单词袋模型中删除选定的单词
removeInfrequentWords 从单词包模型中删除计数低的单词
加入 结合多个单词袋或n-grams袋模型
wordcloud 从文本、单词袋模型、n克袋模型或LDA模型创建词云图

例子

全部折叠

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,单词之间用空格隔开。提取文本。sonnetsPreprocessed.txt,以换行符将文本拆分为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData =分裂(str,换行符);文件= tokenizedDocument (textData);

创建一个单词袋模型使用bagOfWords

袋= bagOfWords(文档)
bag = bagOfWords with properties:计数:[154x3092 double]词汇:[“fairrest”“creatures”“desire”…] NumWords: 3092 NumDocuments: 154

查看排名前10的单词及其总数。

台= topkwords(袋,10)
台=10×2表字数_______ _____“你的”281“你的”234“爱的”162“你的”161“做的”88“我的”63“将”59“眼睛”56“甜蜜”55“时间”53

使用唯一单词的字符串数组和单词计数矩阵创建单词袋模型。

uniqueWords = [“一个”“一个”“另一个”“例子”“最终”“句子”“第三”];数量= (1 2 0 1 0 1 0;0 0 3 1 0 4 0;1 0 0 5 0 3 1;1 0 0 1 7 0 0];袋= bagOfWords (uniqueWords计数)
bag = bagOfWords with properties: Counts: [4x7 double] Vocabulary: ["a" "an" "another" "example"…NumWords: 7 NumDocuments: 4

如果你的文本数据包含在一个文件夹中的多个文件中,那么你可以使用文件数据存储将文本数据导入MATLAB。

为示例十四行诗文本文件创建一个文件数据存储。这些十四行诗的例子都有文件名。exampleSonnetN.txt”,N是十四行诗的数目。指定read函数为extractFileText

readFcn = @extractFileText;fds = fileDatastore (“exampleSonnet * . txt”,“ReadFcn”readFcn)
fds =具有属性的FileDatastore: Files:{'…/tp9b046016/textanalytics-ex73762432/exampleSonnet1.txt';“…/ tp9b046016 / textanalytics-ex73762432 / exampleSonnet2.txt”;“…/ tp9b046016 / textanalytics-ex73762432 / exampleSonnet3.txt”……和1个更多}文件夹:{'/tmp/Bdoc22b_2054784_1501716/tp9b046016/textanalytics-ex73762432'} UniformRead: 0 ReadMode: 'file' BlockSize: Inf PreviewFcn: @extractFileText SupportedOutputFormats: ["txt" "csv" "xlsx" "xls"…] ReadFcn: @extractFileText AlternateFileSystemRoots: {}

创建一个空的单词袋模型。

袋= bagOfWords
bag = bagOfWords with properties: Counts: [] words: [1x0 string] NumWords: 0 NumDocuments: 0

循环遍历数据存储中的文件并读取每个文件。对每个文件中的文本进行标记,并将文档添加到

Hasdata (fds) STR = read(fds);文档= tokenizedDocument (str);袋= addDocument(袋、文档);结束

查看更新后的bag-of-words模型。

bag = bagOfWords with properties:计数:[4x276 double]词汇:[“来自”“最公平的”“生物”“我们”…NumWords: 276 NumDocuments: 4 .

通过输入一个停止单词列表来从单词袋模型中删除停止单词removeWords。停止词是指“a”、“the”和“in”等通常在分析之前从文本中删除的词。

文件= tokenizedDocument ([“一个短句的例子”“第二句短句”]);袋= bagOfWords(文件);stopWords newBag = removeWords(袋)
newBag = bagOfWords带有属性:Counts: [2x4 double]词汇:["example" "short" "sentence" "second"] NumWords: 4 NumDocuments: 2

创建单词袋模型中最频繁出现的单词表。

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,单词之间用空格隔开。提取文本。sonnetsPreprocessed.txt,以换行符将文本拆分为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData =分裂(str,换行符);文件= tokenizedDocument (textData);

创建一个单词袋模型使用bagOfWords

袋= bagOfWords(文档)
bag = bagOfWords with properties:计数:[154x3092 double]词汇:[“fairrest”“creatures”“desire”…] NumWords: 3092 NumDocuments: 154

找到前五个单词。

T = topkwords(袋);

找到模型中排名前20的单词。

k = 20;T = topkwords(袋、k)
T =20×2表字数________ _____“你的”281“你的”234“爱的”162“你的”161”做“88”我的“63”将“59”眼睛“56”甜蜜“55”时间“53”美丽“52”也不是“52”艺术“51”然而“51”o“50”心“50”

从词汇袋模型创建一个术语频率-反向文档频率(tf-idf)矩阵。

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,单词之间用空格隔开。提取文本。sonnetsPreprocessed.txt,以换行符将文本拆分为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData =分裂(str,换行符);文件= tokenizedDocument (textData);

创建一个单词袋模型使用bagOfWords

袋= bagOfWords(文档)
bag = bagOfWords with properties:计数:[154x3092 double]词汇:[“fairrest”“creatures”“desire”…] NumWords: 3092 NumDocuments: 154

创建一个tf-idf矩阵。查看前10行和列。

M = tfidf(袋);完整的(M (1:10, 1:10))
ans =10×103.6507 4.3438 2.7344 3.6507 4.3438 2.2644 3.2452 3.8918 2.4720 2.5520 4.5287 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5520 2.2644 2.2644 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.2644 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7344 2.2644 2.5520 0 0 0 0 0 0 0 0 0 0 0 0

加载示例数据。该文件sonnetsPreprocessed.txt包含莎士比亚十四行诗的预处理版本。该文件每行包含一首十四行诗,单词之间用空格隔开。提取文本。sonnetsPreprocessed.txt,以换行符将文本拆分为文档,然后对文档进行标记。

文件名=“sonnetsPreprocessed.txt”;str = extractFileText(文件名);textData =分裂(str,换行符);文件= tokenizedDocument (textData);

创建一个单词袋模型使用bagOfWords

袋= bagOfWords(文档)
bag = bagOfWords with properties:计数:[154x3092 double]词汇:[“fairrest”“creatures”“desire”…] NumWords: 3092 NumDocuments: 154

用词云来想象单词袋模型。

图wordcloud(袋);

图中包含一个类型为wordcloud的对象。

如果您的文本数据包含在一个文件夹中的多个文件中,那么您可以导入文本数据并使用parfor。如果您安装了并行计算工具箱™,则parfor循环是并行运行的,否则,它是串行运行的。使用加入将一组单词袋模型组合成一个模型。

从文件集合中创建一个单词包模型。这些十四行诗的例子都有文件名。exampleSonnetN.txt”,N是十四行诗的数目。获取文件列表及其使用的位置dir

fileLocation = fullfile (matlabroot,“例子”,“textanalytics”,“数据”,“exampleSonnet * . txt”);fileInfo = dir (fileLocation);

初始化一个空的词袋模型,然后遍历文件并创建一个词袋模型数组。

袋= bagOfWords;numFiles =元素个数(fileInfo);parfori = 1:numFiles f = fileInfo(i);文件名= fullfile (f.folder f.name);textData = extractFileText(文件名);文档= tokenizedDocument (textData);袋(我)= bagOfWords(文档);结束
使用“Processes”配置文件启动并行池(parpool)…连接到并行池(工人数量:4)。

结合词汇袋模型使用加入

袋=加入(袋)
bag = bagOfWords with properties:计数:[4x276 double]词汇:[“来自”“最公平的”“生物”“我们”…NumWords: 276 NumDocuments: 4 .

提示

  • 如果您打算为您的工作使用一个保留的测试集,那么在使用之前对您的文本数据进行分区bagOfWords。否则,词汇袋模型可能会对你的分析产生偏见。。

版本历史

介绍了R2017b

Baidu
map