解析法文中的自然语言数字(拼写清楚)

时间:2019-01-08 12:55:14

标签: java parsing numbers french

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

JDK或另一个库中是否已经存在诸如the month one之类的枚举或类似的易于实现的枚举?

1 个答案:

答案 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)转换为自然数,然后重新创建原始句子。