Skip Bi-grams in Java String(比较两个句子)
Skip Bi-grams in Java String (Compare two sentences)
我需要帮助才能使用 Java 中的字符串来完成这件事。
对我来说最好的解释方法是使用示例。
所以,我想从两个句子(用户输入)中提取skip bi-grams,然后能够在相似性方面相互比较。
第 1 句:"I love green apples."
句子#2:"I love red apples."
此外,还有一个名为"distance"的变量,用于获取单词之间的距离。 (暂时不是很重要)
结果
使用3距离从句子#1中提取的skip bi-grams将是:
{我爱}、{我爱绿}、{我爱苹果}、{爱绿}、{爱苹果}、{绿苹果}
(共 6 个二元语法)
从句子 #2 中使用 距离 3 提取的 skip bi-grams 将是:
{我爱},{我红},{我苹果},{爱红},{爱苹果},{红苹果}
(共 6 个二元语法)
到目前为止,我一直在考虑使用 String[] 来拆分 String 句子。
所以我的问题是,从句子中提取这些二元语法的代码是什么?
提前致谢!
基本上,您想从一个单词的句子中找到所有唯一的两个单词组合。
这是一个涉及 ArrayList 的解决方案:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static String[][] skipBigrams(String input) {
String[] tokens = input.replaceAll("[^a-zA-Z ]", "").split("\s+");
return skipBigrams(tokens);
}
private static String[][] skipBigrams(String[] tokens) {
List<String[]> bigrams = new ArrayList<>();
for (int i = 0; i < tokens.length; i++) {
for (int j = i + 1; j < tokens.length; j++) {
bigrams.add(new String[]{tokens[i], tokens[j]});
}
}
String[][] result = new String[bigrams.size()][2];
result = bigrams.toArray(result);
return result;
}
public static void main(String[] args) {
String s1 = "I love green apples.";
System.out.println(Arrays.deepToString(skipBigrams(s1)));
}
}
我需要帮助才能使用 Java 中的字符串来完成这件事。 对我来说最好的解释方法是使用示例。
所以,我想从两个句子(用户输入)中提取skip bi-grams,然后能够在相似性方面相互比较。
第 1 句:"I love green apples." 句子#2:"I love red apples."
此外,还有一个名为"distance"的变量,用于获取单词之间的距离。 (暂时不是很重要)
结果
使用3距离从句子#1中提取的skip bi-grams将是:
{我爱}、{我爱绿}、{我爱苹果}、{爱绿}、{爱苹果}、{绿苹果}
(共 6 个二元语法)
从句子 #2 中使用 距离 3 提取的 skip bi-grams 将是:
{我爱},{我红},{我苹果},{爱红},{爱苹果},{红苹果}
(共 6 个二元语法)
到目前为止,我一直在考虑使用 String[] 来拆分 String 句子。
所以我的问题是,从句子中提取这些二元语法的代码是什么?
提前致谢!
基本上,您想从一个单词的句子中找到所有唯一的两个单词组合。
这是一个涉及 ArrayList 的解决方案:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static String[][] skipBigrams(String input) {
String[] tokens = input.replaceAll("[^a-zA-Z ]", "").split("\s+");
return skipBigrams(tokens);
}
private static String[][] skipBigrams(String[] tokens) {
List<String[]> bigrams = new ArrayList<>();
for (int i = 0; i < tokens.length; i++) {
for (int j = i + 1; j < tokens.length; j++) {
bigrams.add(new String[]{tokens[i], tokens[j]});
}
}
String[][] result = new String[bigrams.size()][2];
result = bigrams.toArray(result);
return result;
}
public static void main(String[] args) {
String s1 = "I love green apples.";
System.out.println(Arrays.deepToString(skipBigrams(s1)));
}
}