Разбор чисел на естественном языке (прописано) на французском - PullRequest
0 голосов
/ 08 января 2019

Какой самый простой способ в Java для анализа строки для извлечения чисел, написанных на естественном языке? Например, я хотел бы извлечь число в I have thirty three apples. Число должно быть низким (менее пятидесяти) и будет по-французски (например, dix sept).

Есть ли уже в JDK или другой библиотеке перечисление типа за месяц или что-то подобное, чтобы сделать это легко?

1 Ответ

0 голосов
/ 08 января 2019
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();
}
}

Как работает алгоритм:

INPUT: J'ai cinq tomates.

РЕЗУЛЬТАТ: J'ai 5 томатов

Из того, что я понял, вы хотите обнаружить письменное число во французском предложении.

Я не знаю ваших точных требований, но чтобы помочь вам, я написал алгоритм, который переводит написанные французские числа (от 1-5) в натуральные числа, а затем воссоздает исходное предложение.

...