Предположим, мы следующий текстподсчета частоты букв в тексте с использованием MATLAB
s='i love georgia and its nature';
то, что я хочу, чтобы подсчитать частоту появления каждой буквы (пространство не включены, конечно) и эскиз некоторые диаграммы (например, гистограмма), первый я создал код, который подсчитывает письма, используя контейнер карты
function character_count(s)
% s is given string and given program will count occurence of letters in
% sentence
MAP=containers.Map();% initialize MAP for frequency counting
n=length(s); % get length of given string
letters=unique_without_space_sorting(s);
for ii=1:n
if ~isletter(s(ii))==1
continue;
elseif isKey(MAP,s(ii))
MAP(s(ii)) = MAP(s(ii)) + 1;
else
MAP(s(ii)) = 1;
end
end
y=values(MAP);
y= cell2mat(y);
bar(y);
set(gca,'xticklabel',letters)
end
здесь функционируют
letters=unique_without_space_sorting(s);
возвращает элемент массива букв строки s без сортировки и пространства, здесь его соответствующий код
function cell_stirng=unique_without_space_sorting(s)
s=regexprep(s,'[^\w'']','');
[~, idxs, ~] = unique(s, 'last');
s= s(sort(idxs));
n=length(s);
cell_stirng=cell(n,1);
for jj=1:n
cell_string{jj}=s(jj);
end
end
, когда я запускаю этот код, я получил следующее изображение
, как вы видите, нет этикеток на оси x, как я могу исправить эту проблему? спасибо заранее
Заголовок вопроса не имеет ничего общего с фактической проблемой/проблемой. – P0W
Обычно в таких случаях вы очищаете ввод, используя некоторое регулярное выражение всех нерелевантных символов, затем либо конвертируете его в один и тот же регистр (WLG: нижний регистр), либо нет - в зависимости от того, что вы определяете как «уникальную» букву. Затем создайте гистограмму с буквами значений ASCII алфавита в виде бункеров (для этого '' histcounts' использует метод '' integers''). Это также покажет вам письма, которые вообще не появляются. –
@ P0W какое будет релевантное имя? –