【问题标题】:Java Shingle PairsJava 带状疱疹对
【发布时间】:2015-02-18 14:09:09
【问题描述】:

我正在使用一个程序来从文本文件中的每个句子创建瓦片对时遇到问题。现在我的代码读入 Java 中的 .txt 文件并按顺序输出每个句子。我想分别存储每个句子,然后取出每个句子并创建它们的 2 个字符的带状疱疹,这些带状疱疹将存储在一个数组中。这方面的一个例子是将句子“The quick brown fox”变成{th, he, e, q, qu, ui, ic, ck, k, b, br, ro, ow, wn, n, f, fo, ox} 以便计算单词之间的所有空格。我的目标是简单地获取每个句子并为每个句子创建一个数组,其中包含上面示例中的瓦片对。我的问题是我不知道该怎么做。我似乎无法弄清楚如何获取句子并将它们分开存储,并且我不确定如何创建 shingle pair。我对 Java 还是很陌生,非常感谢任何帮助。到目前为止,这是我的代码:

//Takes .txt file as command-line input parameter
File file = new File(args[0]);
Scanner scanner = new Scanner(new FileInputStream(file)); 
int i=0;

//Reads in and outputs each line from the file
while (scanner.hasNextLine()) {
System.out.print(++i + " : " + scanner.nextLine() + "\n");
}  

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    只需要从 [0,1] 到 [last-1,last] 的字符对

    String[] result = new String[sentence.length() - 1];
    for (int i = 0; i < sentence.length() - 2; i++)
    {
        result[i] = sentence.substring(i, i + 2);
    }
    

    如果需要,可以在此循环之后删除带有trim() 的空格。

    【讨论】:

    • 非常感谢,这正是我所需要的。
    【解决方案2】:

    要拆分成句子,您可以使用模式匹配。只需为您的任务定义什么是有效的句子。这里我假设一个句子总是以点、问号或感叹号结尾;并且下一个句子在一个或多个空格之后开始

    final Pattern sentencePattern = Pattern.compile("[\\.\\?!]+\\s+");
    sentencePattern.splitAsStream(text).forEach(
            System.out::println //your code here
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-13
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多