Matlabでしりとりをするには

4 views (last 30 days)
Yuu
Yuu on 5 Nov 2019
Commented: Yuu on 6 Nov 2019
Matlabでしりとりをしたいです。
そのための単語帳の作り方がわかりません。
ヒントなどを教えていただけると幸いです。
  2 Comments
Kazuya
Kazuya on 5 Nov 2019
面白そうですが、なんとお答えしたらいいのか・・。
もう少し具体的な内容での質問をお願いします。
Yuu
Yuu on 6 Nov 2019
コメントいただき誠にありがとうございます。
確かに、たった3行で不明瞭な質問でございます...失礼いたしました。
Akira Agata様の回答を参考にプログラムを作成してみようと思います。
次回からはより詳細な内容を記載して質問いたします。

Sign in to comment.

Accepted Answer

Akira Agata
Akira Agata on 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
実行結果:
宝 (タカラ)
ら (ラ)
裸体 (ラタイ)
行き (イキ)
綺麗 (キレイ)
偉大 (イダイ)
いつ (イツ)
つもり (ツモリ)
両足 (リョウアシ)
私慾 (シヨク)
====おわり====
  1 Comment
Yuu
Yuu on 6 Nov 2019
ご回答いただき誠にありがとうございます。
また、詳細が記載されていないような質問にも関わらず、お答えいただいたことにも大変感謝申し上げます。
頂いた回答を参考に、プログラムを作ってみます。
この度は、誠にありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on MATLAB Compiler in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!