-2

Java中解析字符串以提取用自然语言编写的数字的最简单方法是什么?例如,我想提取I have thirty three apples. 这个数字应该很低(小于 50)并且是法语(dix sept例如)。

JDK 或其他库中是否已经有一个像第一个月这样的枚举或类似的东西可以轻松做到这一点?

4

1 回答 1

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 tomates。

输出:J'ai 5 个番茄

据我了解,您想检测法语句子中的书面数字。

我不知道您的确切要求,但为了帮助您,我编写了一个算法,将书面法语数字(从 1-5)翻译成自然数,然后重新创建原始句子。

于 2019-01-08T15:48:22.420 回答