読者です 読者をやめる 読者になる 読者になる

let's learn java language

I learning java language.

言語処理100本ノック 第1章: 準備運動 05

java 言語処理100本ノック

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 しなくていいって思ったけど、例外前提ってのはよくないときいて。