Matlabでしりとりをするには

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

댓글을 달려면 로그인하십시오.

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 MATLAB Compiler에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!