2012-03-01 12 views
8

Jaki jest najbardziej skuteczny sposób na uzyskanie czasu przeszłego czasownika, najlepiej bez użycia ciężkich frameworków NLP pamięci?Jak uzyskać czas przeszły od czasownika?

np.

  • żywo do: żył
  • spróbować: próbował
  • z kranu do: podsłuchu
  • gotować do: gotowane
  • sprzedać: sprzedane

pisałem coś szybko się (przepełnienie stosu nie pozwala mi na samodzielną odpowiedź), które wydaje się działać dla regularnych czasowników (np. pierwsze 4 z tej listy), ale nieregularne czasowniki: http://pastebin.com/Txh76Dnb

edytuj: Dziękuję za wszystkie odpowiedzi, wygląda na to, że nie można tego zrobić poprawnie bez słownika z powodu nieregularnych czasowników.

+5

* ".. bez użycia ciężkiego pamięć ram NLP?" * Używaj API VooDoo? Bardzo lekkie na pamięć, choć może to kosztować niektóre kury i inne małe zwierzęta. –

+1

Będziesz potrzebował słownika. –

+0

@OliCharlesworth, czy znasz jakieś słowa, które nie zostałyby poprawnie przetworzone przez ten algorytm: http://web2.uvcs.uvic.ca/elc/studyzone/330/grammar/pasted.htm, który wymagałby słownika? –

Odpowiedz

10

Podczas gdy chciałem zrobić to algorytmicznie bez użycia słowników, musiałem uciekać się do używania jednego.

Okazało się, że najbardziej wydajną biblioteką była SimpleNLG.

Ponieważ ich docs są zsynchronizowane z aktualnym API, oto jak to osiągnąć:

XMLLexicon lexicon = new XMLLexicon("path\\to\\default-lexicon.xml"); 
WordElement word = lexicon.getWord("live", LexicalCategory.VERB); 
InflectedWordElement infl = new InflectedWordElement(word); 
infl.setFeature(Feature.TENSE, Tense.PAST); 
Realiser realiser = new Realiser(lexicon); 
String past = realiser.realise(infl).getRealisation(); 
System.out.println(past); 
+0

Jak mogę to odwrócić? tj. chciałbym znaleźć "odtwarzanie" ze słowa kluczowego "played". – talha06

+0

Nie mam już biblioteki SimpleNLG na tym komputerze, więc nie testowałem jej, ale uważam, że powinno to być tak proste, jak zmiana czwartej linii, tak aby Tense.PAST był Tense.FUTURE i zmiana drugiej linii, więc że "na żywo" jest "grany". –

+0

Nie, to nie ... Próbowałem tego, co powiedziałeś; ale nie działał. podaje wynik "granego" dla wejścia "granego". – talha06

1

Skorzystaj ze słownika webservice.

DictService jest dość popularnym.

Pobiera wyniki z http://www.dict.org. który zapewnia różne bazy danych. Jest jeden przydatny "The Collaborative International Dictionary of English v.0.48", który zwraca definicje słów, a także czasy.

Będziesz musiał przeanalizować wynik, aby znaleźć czas przeszły.

+0

Dzięki za link, ale wolę rozwiązanie offline dla przenośności i wydajności. –

3

Jednym ze sposobów, w jaki można pójść, może być stworzenie słownika nieregularnych czasowników (tych, które nie podążają za zwykłym wzorcem), a następnie najpierw wyszukiwanie tego słowa. Jeśli słowo się nie pojawi, użyj swojego algorytmu. Czy ktoś zna względną liczbę regularnych vs nieregularnych czasowników w języku angielskim?

+2

http: //en.wikipedia.org/wiki/List_of_English_irregular_verbs Nie wygląda to zbyt często, dopóki nie uświadomisz sobie, że jak pokazuje tabela, wiele czasowników może być złożonych, a różnorodność czasowników, które możesz stworzyć w ten sposób, jest praktycznie nieograniczona. Szczególna wzmianka dotyczy "zawieszenia" i "kłamstwa", które mogą mieć zarówno regularne jak i nieregularne czasy przeszłe, w zależności od ich semantyki. – biziclop