gpt4 book ai didi

java - 有没有一种方法可以搜索一串歌词,然后将匹配的短语子串出来

转载 作者:行者123 更新时间:2023-11-30 10:21:48 24 4
gpt4 key购买 nike

我需要在歌词中搜索匹配的短语。

例如:

我有这样的歌词。

是我的那个,我知道它是什么东西什么东西什么东西她爱你和 某事某事某事。”


给定下面的搜索词,搜索最接近匹配的歌词并计算子字符串中的字符数。我的问题是使用 indexOf 找到最接近的匹配返回第一个 SHE。我需要能够子串出结束匹配的短语。

结果应该打印出来:

“她爱我”最接近的匹配搜索是“她爱你和我”。

索引长度:20

最佳答案

我知道它不是最优化或最有效的。但是,以下代码适用于大多数关键字。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class KeywordSearch {

public static void main(String[] args) {
System.out.println(getMatchingLyrics("She is the one that I love, "
+ "I know it something something something something something "
+ "she loves you and me something something something.",
Arrays.asList("she you".toLowerCase().split(" "))));
}

private static String getMatchingLyrics(String lyrics, List<String> keywords) {
String[] lyricWords = lyrics.split(" ");

// Split and get the word index for keyword matches
Map<Integer, String> lyricEngine = new TreeMap<>();
for(int i = 0; i < lyricWords.length; i++) {
String search = lyricWords[i].toLowerCase().replaceAll("[^a-zA-Z0-9]", "");
if (keywords.contains(search) && !lyricEngine.values().contains(lyricWords[i])) {
lyricEngine.put(i, lyricWords[i]);
}
}

Integer min = null;
Integer max = null;
if (lyricEngine.size() == 1) {
return lyricEngine.values().iterator().next();
} else if (lyricEngine.size() <= keywords.size()) {
List<Integer> coll = new ArrayList<>(lyricEngine.keySet());
min = coll.get(0);
max = coll.get(lyricEngine.size() - 1);
} else {
// Prepare the difference between the indexes
Map<Integer, String> set = new TreeMap<>();
List<Integer> keys = new ArrayList<>(lyricEngine.keySet());
for(int i=0; i <= lyricEngine.size() - keywords.size(); i++) {
int j = i + keywords.size() - 1;
int diff = keys.get(j);
StringBuilder str = new StringBuilder(keys.get(j) + "");
for (j = j - 1; j >= i; j--) {
diff -= keys.get(j);
str.append(',');
str.append(keys.get(j));
}
set.put(diff, str.toString());
}

// Get the value with minimum difference
for(String s:set.get(set.keySet().toArray()[0]).split(",")) {
int x = Integer.parseInt(s);
if (min == null && max == null) {
max = x;
min = x;
} else {
if (x > max) {
max = x;
} else if (x < min) {
min = x;
}
}
}
}

// Build the string from indexes
StringBuilder s = new StringBuilder();
for (int i = min; i <= max; i++) {
s.append(lyricWords[i]);
if (i < max) {
s.append(" ");
}
}
return s.toString();
}
}

您可以根据需要构建和优化它。解释作为评论给出。如果您有任何疑问,请随时在 DM 或评论中询问我。

针对不同的关键词,

Keyword: she loves me
Output: she loves you and me

Keyword: I love it
Output: I love, I know it

Keyword: she is one love
Output: She is the one that I love,

关于java - 有没有一种方法可以搜索一串歌词,然后将匹配的短语子串出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47633239/

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