使用MATLAB的字频图图

时间:2013-02-04 07:33:02

标签: matlab import frequency word-frequency

我有一个大文本文件,其中包含大约1000万个唯一单词,其频率分为两列,如下所示:

apple 10
banana 21
pineapple 7
orange 9
...

我想绘制一个图表,其中频率为Y轴,字为X轴。我使用了'load'命令,但它似乎不起作用。我收到以下错误:

Error using ==> load
Unknown text on line number 1 of ASCII file C:\Users\..\Desktop\inputdata.txt
"aa"

我可以如何绘制图表的任何解决方案?

2 个答案:

答案 0 :(得分:1)

尝试importdata,例如:

 a=importdata('inputdata.txt')

a.data - 将输出数值向量[10,21,...]

a.textdata - 将输出一个包含applebanana等单词的单元格数组

所以如果你想根据频率排序:

[b idx]=sort(a.data,'descend')
plot(a.data(idx));

另一种选择是使用barh,如下所示:

[b idx]=sort(a.data)
barh(a.data(idx));
set(gca,'yticklabel',a.textdata(idx)) 

enter image description here

但是,这只适用于有限的单词列表,而不是1000万......

答案 1 :(得分:0)

您无法加载.txt文件。您需要使用文件I / O函数,例如textscan

fid = fopen('inputdata.txt');
data = textscan(fid, '%s%f')
fclose(fid);

data将是1x2单元格。内容将是:

<4x1 cell>  [10;21;7;9]

data{1,1},这是4x1单元格:

'apple'
'banana'
'pineapple'
'orange'

您可以像这样访问字符串:

data{1,1}(2) 

将输出'banana'

并访问这样的数字:

data{1,2}(2)

会给你21,这是香蕉的相应数字。