Matlabでしりとりをするには
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matlabでしりとりをしたいです。
そのための単語帳の作り方がわかりません。
ヒントなどを教えていただけると幸いです。
2 commentaires
Réponse acceptée
Akira Agata
le 5 Nov 2019
しりとりをするには、少なくとも「単語」「読みの最初の文字」「読みの最後の文字」の3列から成る単語帳が必要になるように思います。さらに、一回使った単語は以降使わないようにするため、既出かどうかを記録するための列もあったほうが良さそうです。
たとえば以下のような感じではいかがでしょうか?
% 一例として、青空文庫形態素解析データ集からダウンロードした、
% 「走れメロス」の形態素解析データから単語帳を作成します。
% http://aozora-word.hahasoha.net/index.html
T = readtable('1567_14913.csv','ReadVariableNames',false);
% 名詞だけを抽出
idx = strcmp(T.Var5,'名詞');
T(~idx,:) = [];
% 単語と読みの列を抽出
T = T(:,{'Var4','Var12'});
T.Properties.VariableNames = {'Tango','Yomi'};
% 重複を除去
[~,ia] = unique(T.Tango);
T = T(ia,:);
% 読みの最初と最後の文字を抽出
T.Start = cellfun(@(x) {x(1)}, T.Yomi);
T.End = cellfun(@(x) {x(end)}, T.Yomi);
% 使った単語を記録するための列
T.tfUsed = false(height(T),1);
% ア~ワまでの文字で終わる単語のみを抽出
kana = char((12450:12527)');
idx = ismember(T.End,kana);
T(~idx,:) = [];
% 最初の単語をランダムに選択
pt = randi(height(T));
fprintf('%s (%s)\n',T.Tango{pt},T.Yomi{pt});
T.tfUsed(pt) = true;
% しりとりスタート!
for kk = 1:10
pt = find(strcmp(T.End{pt},T.Start) & ~T.tfUsed);
if isempty(pt)
disp('====おわり====');
break;
end
pt = pt(randi(numel(pt)));
fprintf('%s (%s)\n',T.Tango{pt},T.Yomi{pt});
T.tfUsed(pt) = true;
end
実行結果:
宝 (タカラ)
ら (ラ)
裸体 (ラタイ)
行き (イキ)
綺麗 (キレイ)
偉大 (イダイ)
いつ (イツ)
つもり (ツモリ)
両足 (リョウアシ)
私慾 (シヨク)
====おわり====
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur MATLAB Compiler dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!