如何从已分词文档提取名词并筛选Top3?代码故障排查求助
问题分析与代码修正
你的代码存在几个关键问题,导致无法正常提取名词:
- 重复创建分词文档:
sT2已经是tokenizedDocument对象,无需再用tokenizedDocument(sT2)重新创建,这会导致后续处理异常。 - 循环范围错误:
size(td7)返回的是包含行数和列数的二维数组,直接用for ii = 1:siztd7会导致循环次数错误,应该取行数siztd7(1)。 - Cell数组访问错误:
td7是cell数组,需要用花括号{}访问内部元素,而不是圆括号(),否则strcmp比较的是cell对象而非字符串内容。 - 提取目标行错误:保存名词时,你始终取
tdetails(1,:)(第一行),应该取当前循环对应的tdetails(ii,:)。 - 未初始化结果容器:
tDNoun未提前初始化,直接赋值会引发维度不匹配的错误。
修正后的代码
% 初始化字符串数组并创建分词文档 strs = [ "a strongly worded collection of words and letters" "another collection of words"]; tD = tokenizedDocument(strs); % 添加词性标注 tD = addPartOfSpeechDetails(tD); % 获取分词详情表 tdetails = tokenDetails(tD); % 提取词性列(转为cell数组) posCell = table2cell(tdetails(:, "PartOfSpeech")); % 初始化存储名词的table tDNoun = table(); cc = 1; % 遍历所有分词,筛选名词 for ii = 1:size(posCell, 1) if strcmp(posCell{ii, 1}, 'noun') tDNoun(cc, :) = tdetails(ii, :); cc = cc + 1; end end % 创建词袋并提取前3个高频名词 bag = bagOfWords(tDNoun.Token); top3Nouns = topkwords(bag, 3)
内容的提问来源于stack exchange,提问作者Mark Palmer
相关产品推荐
相关产品推荐

