【问题标题】:Ngram generation from word to character从单词到字符的 Ngram 生成
【发布时间】:2019-02-19 05:30:47
【问题描述】:

如何从 JAVA 中的单词序列生成 ngram?

string = '麦当劳世界'

n=3

输出应该是

['McD'、'cDo'、'Don'、'ona'、'nal'、'ald'、'lds'、'dsw'、'swo'、'wor'、'orl'、'rld ']

用 Java 给出一些想法,如何实现它。

【问题讨论】:

  • 删除单词之间的空格。然后,获取要输出的字符数的窗口大小。
  • 到目前为止你尝试了什么?

标签: java nlp


【解决方案1】:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class NgramGenerator {

    public static void main(String[] args) {
        System.out.println(generateNgrams("ABC", 3));
        System.out.println(generateNgrams("McDonalds world", 3));
        System.out.println(generateNgrams("Mc Donalds world", 3));
        System.out.println(generateNgrams("McDonalds ", 1));
        System.out.println(generateNgrams("M  ", 1));
        System.out.println(generateNgrams("M ", 1));
        System.out.println(generateNgrams(" ", 1));
        System.out.println(generateNgrams("", 1));
        System.out.println(generateNgrams(null, 1));
    }

    private static List<String> generateNgrams(String word, int ngram) {

        if (ngram == 0 || word == null) {
            return Collections.emptyList();
        }

        word = word.replace(" ", "");

        if (word.isEmpty()) {
            return Collections.emptyList();
        }

        if (ngram > word.length()) {
            throw new IllegalArgumentException("Invalid word or n-gram");
        }

        List<String> ngrams = new ArrayList<>();
        for (int i = 0; i <= word.length() - ngram; i++) {
            ngrams.add(word.substring(i, i + ngram).trim());
        }
        return ngrams;
    }
}

【讨论】:

  • 看来你是 StackOverflow 的新手。请不要立即给出答案,尤其是这样的问题,因为 OP 没有发布他/她的尝试。通过立即给出答案,您正在谈论 OP 的学习机会。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多