主要内容

bagOfWords

Bag-of-words模型

描述

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

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

创建

描述

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

例子

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

例子

= bagOfWords (uniqueWords计数中的单词创建单词袋模型uniqueWords相应的频率也算进去了计数

输入参数

全部展开

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

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

例子:["an" "example" "list"]

数据类型:字符串|细胞

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

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

属性

全部展开

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

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

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

模型中的唯一单词,指定为字符串向量。

数据类型:字符串

对象的功能

编码 将文档编码为单词或n-gram计数矩阵
tfidf 术语频率逆文档频率(tf-idf)矩阵
topkwords 词袋模型或LDA主题中最重要的词
addDocument 将文档添加到单词袋或n-grams袋模型中
removeDocument 从单词袋或n-grams袋模型中删除文档
removeEmptyDocuments 从标记化文档数组、单词袋模型或n-grams袋模型中删除空文档
removeWords 从文档或单词袋模型中删除所选单词
removeInfrequentWords 从单词袋模型中删除计数低的单词
加入 组合多个单词袋或n-grams袋模型
wordcloud 从文本、单词袋模型、n-grams袋模型或LDA模型创建词云图

例子

全部折叠

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

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

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…NumWords: 3092 NumDocuments: 154

查看前10个单词及其总数。

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

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

uniqueWords = [“一个”“一个”“另一个”“例子”“最终”“句子”“第三”];计数= [...1 2 0 1 0 10 0;0 0 3 1 0 4 0;1 0 0 5 0 3 1;1 0 0 1 7 0 0];袋子= bagOfWords(uniqueWords,计数)
计数:[4x7 double]词汇:["a" "an" "another" "example"…NumWords: 7 NumDocuments: 4

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

为示例十四行诗文本文件创建一个文件数据存储。十四行诗的例子都有文件名"exampleSonnetN.txt”,N是十四行诗的数字。指定要的读取函数extractFileText

readFcn = @extractFileText;fds = fileDatastore(“exampleSonnet * . txt”“ReadFcn”readFcn)
fds = FileDatastore属性:Files:{'…/tp86c97467/textanalytics-ex73762432/exampleSonnet1.txt';“…/ tp86c97467 / textanalytics-ex73762432 / exampleSonnet2.txt”;/tp86c97467/textanalytics-ex73762432/exampleSonnet3.txt{'/tmp/Bdoc22b_2134332_788198/tp86c97467/ textanalysis -ex73762432'} UniformRead: 0 ReadMode: 'file' BlockSize: Inf PreviewFcn: @extractFileText SupportedOutputFormats:万博1manbetx ["txt" "csv" "xlsx" "xls"…] ReadFcn: @extractFileText AlternateFileSystemRoots: {}

创建一个空的词袋模型。

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

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

Hasdata (fds) STR = read(fds);文档= tokenizedDocument(str);bag = addDocument(包,文档);结束

查看更新后的词袋模型。

词汇:["来自" "最公平的" "生物" "我们"…NumWords: 276 NumDocuments: 4

通过输入一个停止词列表来从单词袋模型中删除停止词removeWords.停止词是像“a”,“the”和“in”这样的词,它们通常在分析之前从文本中删除。

documents = tokenizedDocument([一个短句的例子。“第二个短句”]);bag = bagOfWords(文档);newBag = removeWords(包,stopWords)
newBag = bagOfWords with properties:计数:[2x4 double]词汇:["example" "short" "sentence" "second"] NumWords: 4 NumDocuments: 2

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

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

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

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…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”50“

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

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

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

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…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 = split(str,换行符);documents = tokenizedDocument(textData);

使用创建单词袋模型bagOfWords

bag = bagOfWords(文档)
带有属性的单词:[154x3092 double]词汇:["最公平的" "生物" "欲望"…NumWords: 3092 NumDocuments: 154

使用单词云可视化单词袋模型。

图wordcloud(袋);

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

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

从文件集合创建单词袋模型。十四行诗的例子都有文件名"exampleSonnetN.txt”,N是十四行诗的数字。获取文件及其位置的列表dir

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

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

bag = bagOfWords;numFiles = numel(fileInfo);parfori = 1:numFiles f = fileInfo(i);Filename = fullfile(f.folder,f.name);textData = extractFileText(文件名);文档= tokenizedDocument(textData);bag(i) = bagOfWords(文件);结束
使用'Processes'配置文件启动并行池(parpool)…连接到并行池(工人数量:4)。

使用组合词袋模型加入

包=加入(包)
词汇:["来自" "最公平的" "生物" "我们"…NumWords: 276 NumDocuments: 4

提示

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

版本历史

在R2017b中引入