言語処理100本ノック 第1章: 準備運動 05
05. n-gram
与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,"I am an NLPer"という文から単語bi-gram,文字bi-gramを得よ.
java
package net.vg4; import java.util.ArrayList; import java.util.Arrays; import java.util.List; class NGram { public List<List<String>> make(List<String> list, int n) { ArrayList<List<String>> alistlist = new ArrayList<>(); for (int from = 0; from < list.size(); from++) { int to = from + n; if (to > list.size()) { to = list.size(); } List<String> listr = list.subList(from, to); alistlist.add(listr); } return alistlist; } public List<List<String>> make(String str, int n) { return this.make(Arrays.asList(str.split("")), n); } } public class Main { public static void main(String[] args) { String sample = "I am an NLPer"; NGram ngram = new NGram(); List<List<String>> res = ngram.make(sample, 2); System.out.println(res); List<String> list = Arrays.asList(sample.split(" ")); List<List<String>> res2 = ngram.make(list, 2); System.out.println(res2); } }
sublist は例外でとれば毎回 if しなくていいって思ったけど、例外前提ってのはよくないときいて。