2013-04-07 14 views
7

Jak sam tytuł wskazuje Próbuję szukać zaimków w ciągu znaków i zastąpić go z jego poprzednikiem jak:zastępując zaimek z jej poprzednik użyciu python2.7 i NLTK

[in]: "the princess looked from the palace, she was happy". 
[out]: "the princess looked from the palace, the princess was happy". 

używam tag poz wrócić zaimki i rzeczowniki. Muszę wiedzieć, jak zastąpić, nie znając zdania, co oznacza, jak określić temat w zdaniu, aby zastąpić zaimka. Jakieś sugestie?

+3

Powinieneś zajrzeć do systemu [Rozwiązanie Coreolution] (http://en.wikipedia.org/wiki/Coreference) z [Stanford CoreNLP] (http://nlp.stanford.edu/software/corenlp.shtml). Oto opakowanie dla Pythona (https://github.com/dasmith/stanford-corenlp-python). – Jared

Odpowiedz

2

Nie znam pakietu nltk (nigdy go nie użyłem), ale wydaje się, że od razu otrzymasz odpowiedź. Jeśli spojrzysz na przykład drzewa parse na nltk.org, to pokazuje, że temat jest oznaczony etykietą "NP-SBJ". Czy tego nie szukasz?

(Wcześniej przeoczyłem część "nltk" w tytule i napisałem tę część poniżej. Myślę, że może to być interesujące jako ogólne wprowadzenie do rozwiązywania takich problemów (szczególnie, jeśli nie masz pakiet jest dostępny), więc zostawię to tutaj :)

Jest to raczej pytanie "język naturalny" (tj. język angielski) niż pytanie w Pythonie. Czy możesz być bardziej konkretny w jakich rodzajach zdań się spodziewasz? Czy powinien działać dla wszystkich możliwych angielskich zdań? Myślę, że byłoby to naprawdę trudne.

Jeśli zdania są "wystarczająco łatwe", może wystarczyć założenie, że wszystko przed pierwszym czasownikiem jest przedmiotem. Działa to na swoim przykładzie, ale nie działa w następujących zdaniach:

yesterday the princess looked from the palace, she was happy. 
the princes who drank tea looked from the palace, she was happy. 

(Zauważ, że w tym ostatnim zdaniu przedmiotem jest „księżniczką, którzy pili herbatę”, część „którzy pili herbatę” jest "fraza przymiotnika").

również określić co powinno się zdarzyć, jeśli zaimek nie wskazuje na ten temat (ale do obiektu na przykład):

the princess looked at the prince, he was happy. 

W celu rozwiązania tego problemu w najbardziej ogólnym przypadku, należy znaleźć (lub make) formalną specyfikację języka angielskiego (lub jakiegokolwiek innego), która może dokładnie określić, która część zdania jest przedmiotem, czasownikiem, obiektem itp. Przykład: wiele prostych zdań w języku angielskim ma formę (części między nawiasami) [] są opcjonalne, części między nawiasami() są wyborem, tzn. (a | a) oznacza, że ​​powinieneś wybrać "the" lub "a"):

sentence := subject verb [object] 

Każda część po prawej stronie opisie musi być określony bardziej szczegółowo, np

subject, object := (noun_part_of_sentence|noun_part_of_sentence_plural) 
noun_part_of_sentence := article [adjectivelist] [noun_modifier] noun # I guess there is a formal name for this... 
noun_part_of_sentence_plural := [adjectivelist] [noun_modifier] noun_plural # note: no article 
adjectivelist:= adjective [adjectivelist] # i.e., one or more adjectives 

przypadku bardziej złożonych zdań, takie jak podano powyżej przymiotnikiem wyrażenie powyższy opis nie ma wystarczą i powinno być coś takiego:

noun_part_of_sentence := (the|a) [adjectivelist] [noun_modifier] [noun] [adjective_phrase] 
adjective_phrase := relative_pronoun verb [object] 
relative_pronoun := (who|which|that) 

nocie, że specyfikacja powyżej jest już dość silny (jeśli jesteś w stanie poprawnie zidentyfikować typ każdego słowa, np czasownik, rzeczownik, artykuł itd.) może skutecznie wykrywać następujące zdania:

The princess drank the tea. 
The beautiful princess drank the tea. 
The beautiful princess drank delicious the tea. 
A beautiful princess drank delicious the lemon tea. 
The beautiful princess who saw the handsome prince drank the refreshing tea. 
The beautiful princess who saw the handsome prince who made the tea drank the refreshing tea. 

Jednak to nie pozwala (jeszcze) do zdań jak „księżniczka wyglądała w pałacu”, „księżniczka pili herbatę” (uwaga: nie "herbata") i nieskończone inne. Sztuką jest rozszerzenie formalnej specyfikacji do poziomu, który jest odpowiedni dla rodzaju zdań, których się spodziewasz.

Po pomyślnym przeanalizowaniu zdania, użytkownik (w ten sposób) wie, co podmiot, zaimki i można dokonać zamiany. Należy jednak pamiętać, że język angielski nie jest jednoznaczny, na przykład:

The princess looked at her mother, she was happy. 

Czy wskazuje księżniczce lub jej matce?

Powodzenia!

P.S. Angielski nie jest moim ojczystym językiem, więc mam nadzieję, że użyłem właściwych terminów na wszystko!

Powiązane problemy