MATLAB Answers

Yuu
0

Matlabでしりとりをするには

Asked by Yuu
on 5 Nov 2019
Latest activity Commented on by Yuu
on 6 Nov 2019
Matlabでしりとりをしたいです。
そのための単語帳の作り方がわかりません。
ヒントなどを教えていただけると幸いです。

  2 Comments

Kazuya
on 5 Nov 2019
面白そうですが、なんとお答えしたらいいのか・・。
もう少し具体的な内容での質問をお願いします。
Yuu
on 6 Nov 2019
コメントいただき誠にありがとうございます。
確かに、たった3行で不明瞭な質問でございます...失礼いたしました。
Akira Agata様の回答を参考にプログラムを作成してみようと思います。
次回からはより詳細な内容を記載して質問いたします。

Sign in to comment.

Tags

Products

1 Answer

Akira Agata
Answer by Akira Agata
on 5 Nov 2019
 Accepted Answer

しりとりをするには、少なくとも「単語」「読みの最初の文字」「読みの最後の文字」の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
on 6 Nov 2019
ご回答いただき誠にありがとうございます。
また、詳細が記載されていないような質問にも関わらず、お答えいただいたことにも大変感謝申し上げます。
頂いた回答を参考に、プログラムを作ってみます。
この度は、誠にありがとうございました。

Sign in to comment.