gpt4 book ai didi

java - 使用 Split 方法创建分词器

转载 作者:行者123 更新时间:2023-12-02 10:39:41 28 4
gpt4 key购买 nike

我正在尝试创建简单的分词器,该分词器可以按空格分割、小写标记、删除所有非字母字符,并仅保留具有 3 个或更多字符的术语。我编写这段代码,它已经准备好处理小写、非字母字符,并且只保留 3 个或更多字符。但我想使用 split 方法,但我不知道如何。请提出一些建议。

public class main {

public static final String EXAMPLE_TEST = "This Mariana John bar Barr "
+ "12364 FFFFF aaaa a s d f g.";

public static void main(String[] args) {
Pattern pattern = Pattern.compile("(\\s[a-z]{3,20})");
Matcher matcher = pattern.matcher(EXAMPLE_TEST);

while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
}
}

最佳答案

如果您不必跟踪索引:

List<String> processed = Arrays.stream(EXAMPLE_TEST.split(" ")).map(String::toLowerCase)
.map(s -> s.replaceAll("[^a-z]", "")).filter(s -> s.length() >= 3).collect(Collectors.toList());
for (String s : processed) {
System.out.println(s);
}

但是您的示例输出也显示了索引。然后你必须将其存储在额外的容器中(如 map ):

Map<Integer, String> processed = Arrays.stream(EXAMPLE_TEST.split(" ")).collect(Collectors.toMap(s -> EXAMPLE_TEST.indexOf(s), s -> s.toLowerCase().replaceAll("[^a-z]", "")));
Map<Integer, String> filtered = processed.entrySet().stream().filter(entry -> entry.getValue().length() >= 3).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
for (Map.Entry<Integer, String> entry : filtered.entrySet()) {
System.out.println("Start index: " + entry.getKey() + " " + entry.getValue());
}

关于java - 使用 Split 方法创建分词器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016006/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com