akatuki_me

Untitled

Jan 13th, 2020
203
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package summary;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. import com.worksap.nlp.sudachi.Dictionary;
  10. import com.worksap.nlp.sudachi.DictionaryFactory;
  11. import com.worksap.nlp.sudachi.Morpheme;
  12. import com.worksap.nlp.sudachi.Tokenizer;
  13. //import com.worksap.nlp.sudachi.Token;
  14. //import org.atilika.kuromoji.Tokenizer;
  15.  
  16. public class Summary {
  17. public Summary() {
  18. String settings = readAll("sudachi.json");
  19. Dictionary dict = new DictionaryFactory().create(settings);
  20. Tokenizer tokenizer = dict.create();
  21. ArrayList<word> wordList = new ArrayList<word>();
  22.  
  23. String key = "";
  24. String key_option = "";
  25.  
  26. for (Morpheme token : tokenizer.tokenize("河原和音の人気マンガを原作に、吹奏楽部員のつばさ(土屋太凰)と野球部員の大介(竹内涼真)が、ともに「甲子園の夢」を追いかける、ひたむきな姿を描いた映画『青空エール』。高校野球の余韻が残る夏の終わりに公開された本作は、9月10~11日の土日の時点で興行収入10億円を突破するスマッシュヒットになりました。実は私は、今から十数年前の高校生の時に吹奏楽部に所属してアルトサックスを吹いていた当時、なんと母校が全国高校野球選手権大会に出場し、甲子園のスタンドで応援をしたことがあります!今回は、甲子園で野球応援をした元吹奏楽部員の目線から本作を語ります。映画『青空エール』の理解を深めるための副読本的なテキストとなれば幸いです。")) {
  27. String value = token.surface();
  28. String value_option = token.part_of_speech()[0];
  29.  
  30. wordList.add(new word(key, key_option, value, value_option));
  31.  
  32. key = value;
  33. key_option = value_option;
  34. }
  35.  
  36. // 開始ワード
  37. key = wordList.get(1).key;
  38. key_option = wordList.get(1).key_option;
  39.  
  40. while (true) {
  41. ArrayList<Integer> indexList = searchWord(wordList, key, key_option);
  42. if (indexList.size() == 0) break;
  43.  
  44. // 候補からランダムに1件選択
  45. int i = (int)(Math.random() * indexList.size());
  46. String value = wordList.get(indexList.get(i)).value;
  47. String value_option = wordList.get(indexList.get(i)).value_option;
  48.  
  49. // 使用済みフラグを立てる
  50. wordList.get(indexList.get(i)).used_flag = true;
  51. System.out.print(value);
  52.  
  53. // 句読点の場合は改行
  54. if (value.compareTo("。") == 0) System.out.println();
  55.  
  56. // 次回検索条件をセット
  57. key = value;
  58. key_option = value_option;
  59. }
  60.  
  61. System.out.println();
  62. }
  63.  
  64. // キーと品詞が一致するデータのインデックスリストを作成
  65. ArrayList<Integer> searchWord(ArrayList<word> wordList, String key, String key_option) {
  66. ArrayList<Integer> resultList = new ArrayList<Integer>();
  67.  
  68. for (int i = 0; i < wordList.size(); i++) {
  69. if (wordList.get(i).key.compareTo(key) == 0 && wordList.get(i).key_option.compareTo(key_option) == 0 && wordList.get(i).used_flag == false) {
  70. resultList.add(i);
  71. }
  72. }
  73.  
  74. return resultList;
  75. }
  76.  
  77. static class TokenizerTest {
  78. final Tokenizer tokenizer;
  79.  
  80. TokenizerTest(Tokenizer tokenizer) {
  81. this.tokenizer = tokenizer;
  82. }
  83.  
  84. List<Morpheme> split(Tokenizer.SplitMode mode, String line) {
  85. List<Morpheme> tokens = tokenizer.tokenize(mode, line);
  86. return tokens;
  87. }
  88. }
  89.  
  90. public static String readAll(String path) throws IOException {
  91. StringBuilder builder = new StringBuilder();
  92.  
  93. try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
  94. String string = reader.readLine();
  95. while (string != null){
  96. builder.append(string + System.getProperty("line.separator"));
  97. string = reader.readLine();
  98. }
  99. }
  100.  
  101. return builder.toString();
  102. }
  103.  
  104. /**
  105. * @param args
  106. */
  107. public static void main(String[] args) {
  108. new Summary();
  109. }
  110.  
  111. }
RAW Paste Data