2016-07-17 19 views

Odpowiedz

2

sugeruję pomocą WordNet. Możesz wywołać to z java (biblioteka JWNL), itd. Oto propozycja: dla każdego pojedynczego słowa sprawdź jego hypernym. Dla edible na najwyższym poziomie hierarchii hypernymy znajdziesz "żywność, składniki odżywcze". Które jest prawdopodobnie tym, czego chcesz. Aby to przetestować, zapytaj słowo "piwo" w wersji Online. Kliknij "S", a następnie "dziedziczone hypernym". Znajdziesz to gdzieś w hierarchii:

.... 
    S: (n) beverage, drink, drinkable, potable (any liquid suitable for drinking) "may I take your beverage order?" 
     S: (n) food, nutrient (any substance that can be metabolized by an animal to give energy and build tissue) 
      .... 

Możesz przechodzić tę hierarchię przy użyciu języka programowania do wyboru itp Gdy oflagowane wszystkie edibles, wtedy można złapać numer, czyli 2 w „2 piwa "i masz wszystkie potrzebne informacje. Zauważ, że samo wychwycenie liczb może być zadaniem zejścia z kodowania! Mam nadzieję, że to pomoże!

+1

Byłoby to również bardziej odporne na "teraz gotuj jajko przez trzy/trzy minuty". –

3
In [1]: from word2number import w2n 
In [2]: print w2n.word_to_num("One") 
1 
In [3]: print w2n.word_to_num("Two") 
2 
In [4]: print w2n.word_to_num("Thirty five") 
35 

można przekonwertować do numeru z użyciem tego pakietu i resztę rzeczy, które możesz wdrożyć jako swoje potrzeby.

Instalacja tego pakietu.

pip install word2number 

Aktualizacja

można realizować w ten sposób.

from word2number import w2n 
result = {} 
input = "One salad and two beers" 
b = input.split() 
for i in b: 
    if type(w2n.word_to_num(i)) is int: 
     result[b[b.index(i)+1]] = w2n.word_to_num(i) 

Wynik

{ 'piwa': 2 'sałatkowe' 1}

+0

Nie zadziała, jeśli jego "trzydzieści pięć piw" ... – hashcode55

+0

@ hashcode55 Dlatego wspomniałem wyżej, że OP musi zmienić algorytm na jego potrzeby. –