Java中解析字符串以提取以自然语言编写的数字的最简单方法是什么?例如,我想提取I have thirty three apples
中的数字。该数字应低(小于50)并且应使用法语(例如dix sept
)。
JDK或另一个库中是否已经存在诸如the month one之类的枚举或类似的易于实现的枚举?
答案 0 :(得分:0)
import com.sun.deploy.util.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FrenchTranslator {
private static final String EMPTY_SPACE = " ";
private static final Map<String, Integer> frenchNumbers = new HashMap<String, Integer>() {{
put("un", 1);
put("deux", 2);
put("trois", 3);
put("quatre", 4);
put("cinq", 5);
}};
public static void main(String[] args) {
String frenchSentence = "J'ai cinq tomates.";
System.out.println("INPUT: " + frenchSentence);
List <String> words = extractWordsFromFrenchSentence(frenchSentence);
String translatedSentence = createTranslatedSentence(words);
System.out.println("OUTPUT:" + translatedSentence);
}
private static List <String> extractWordsFromFrenchSentence(String frenchSentence){
return Arrays.asList(StringUtils.splitString(frenchSentence, EMPTY_SPACE));
}
private static String createTranslatedSentence( List <String> words){
StringBuilder translatedSentence = new StringBuilder();
words.forEach(word -> {
if(frenchNumbers.containsKey(word)){
translatedSentence.append(EMPTY_SPACE + frenchNumbers.get(word));
}
else {
translatedSentence.append(EMPTY_SPACE + word);
}
});
return translatedSentence.toString();
}
}
算法的工作原理:
输入:J'ai cinq伙伴。
输出:J'ai 5个同伴
据我了解,您想检测法语句子中的书面数字。
我不知道您的确切要求,但是为了帮助您,我编写了一种算法,该算法将书面的法语数字(从1-5)转换为自然数,然后重新创建原始句子。