Jak mogę wyodrębnić słowa ze zdania i określić, która część mowy jest w każdym z nich? [Zamknięte]

19

Chcę napisać coś, co wymaga zdania, identyfikuje każde słowo w nim zawarte i określa, jaką częścią mowy jest każde słowo.

Na przykład

Witaj świecie, jestem zdaniem

zwróciłbym to

verb noun, pronoun verb adjective noun

Idealnie, chciałbym w końcu pójść o krok dalej i zrobić zdanie i programowo zrozumieć, co próbuje zinterpretować, i może coś z tym zrobić.

Moje pytanie brzmi: czy ktoś słyszał o czymś takim?

Vinny
źródło
2
„Cześć” to czasownik? To znaczy, nie wiem co by to było, ale to nie wydaje się czasownikiem.
Dan Ray
@DanRay: Może to pytanie do english.stackexchange.com?
StriplingWarrior
1
@DanRay haha, widzisz? Dlatego próbuję dowiedzieć się, czy coś może to zrobić, ponieważ najwyraźniej mam okropną gramatykę.
Vinny,
@Vinny - Oczywiście, że to możliwe. Problem w tym, że ... jest to kolejny bilion dolarów pomysł, który w tej chwili nie został przekształcony w produkt.
Ramhound
1
@Vinny Tak, ktoś słyszał o czymś takim.
Tulains Córdova

Odpowiedzi:

18

Nazywa się to Przetwarzaniem języka naturalnego i jest to ogromne, złożone pole. Coś, co opisujesz, jest monumentalnym osiągnięciem, a nawet najlepsze rozwiązania, takie jak Watson , nie są dalekie od ideału.

Takie rzeczy sprawiają, że jest to trudne: „Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo”

zdanie poprawne gramatycznie w amerykańskim angielskim, użyte jako przykład tego, w jaki sposób homonimów i homofonów można używać do tworzenia skomplikowanych konstrukcji językowych. Jest dyskutowany w literaturze od 1972 roku ... Został także opisany w książce Stevena Pinkera z 1994 roku The Language Instinct jako przykład zdania, które jest „pozornie bezsensowne”, ale gramatyczne…

Znaczenie zdania staje się bardziej zrozumiałe, gdy zrozumie się, że używa ono miasta Buffalo w stanie Nowy Jork i nieco nietypowego czasownika „do bawołu” (oznaczającego „zastraszanie lub zastraszanie”), a także gdy interpunkcja i gramatyka zostały rozszerzone, tak że zdanie brzmi następująco: „Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo”. Znaczenie staje się jeszcze wyraźniejsze, gdy używa się synonimów: „Bizon żubr, który dręczą inne bizony żubry, same nękają bizony bizony”.

Ryathal
źródło
1
Właśnie tego szukam! Czy ktoś słyszał o tym, że ktoś dostosowuje to na mniejszą skalę? Otwarte źródło? Przykłady zastosowania tego w mniejszych skalach?
Vinny,
@Vinny AFAIK nic nie jest dostępne w otwartym kodzie, ponieważ rozwiązywanie tych problemów jest bardzo opłacalne dla firm, takich jak wykrywanie gramatyki MS Word. Są jednak programy, które są dostępne dla gadających botów.
Ryathal
1
@Vinny Trudność nie ma nic wspólnego ze skalą. Przetwarzanie języka naturalnego ma nieodłączną złożoność, która nie jest zmniejszana po zmniejszeniu „skali”.
Tulains Córdova
6

Chociaż podzielenie zdania i określenie poprawności gramatycznej wraz z rozwiązaniem pierwszego problemu jest łatwiejsze niż drugi problem, wiele zawiłości, takich jak rzeczowniki czasownikowe lub gerunda, takie jak pływanie, programowanie itp. I inne tego rodzaju zawiłości, wciąż stanowi wyzwanie - patrz Morons. odpowiedź.

Ale twój drugi problem - ludzie włożyli wiele wysiłku w znalezienie idealnego rozwiązania, ale naprawdę doskonałego algorytmu „interpretacji” nie da się praktycznie zrealizować w żadnym języku naturalnym, takim jak angielski - istnieją odmiany, które popsułyby twój algorytm. Ta dziedzina - hybryda sztucznej inteligencji, informatyki i językoznawstwa znana jest jako NLP . Zastanów się: nawet Tłumacz Google nie jest idealny do „tłumaczenia” zdań.

Niemniej jednak jest to bardzo interesujące pole do zabawy.

yati sagade
źródło
@StriplingWarrior Chciałem po prostu wystarczająco kontrastować między dwoma problemami postawionymi przez OP. Odnotowany. Edytuj w drodze
yati sagade
4

Myślę, że powinieneś zacząć czytać ten artykuł w Wikipedii:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(jest to dziedzina badawcza, nie oczekujcie żadnego łatwego rozwiązania).

Doktor Brown
źródło
2
Należy dodać, że podczas gdy NLP jest ogromny, trudny i prawdopodobnie trudny do opanowania na dzisiejszych komputerach, tagowanie POS jest najłatwiejszą częścią, a przy wystarczającym rozmiarze korpusu lub dużym zaangażowaniu i ręcznym pisaniu reguł można go rozwiązać prawie idealnie, z pewnością powyżej 99% poprawności. To może wystarczyć dla twoich potrzeb.
Kilian Foth
dziękuję, tego właśnie szukałem.
Amc_rtty
właściwie oparte na opisie OP, powinna to być zaakceptowana odpowiedź, ponieważ poprawnie obserwujesz @KilianFoth
Amc_rtty
-1

Tanim sposobem byłoby założenie bazy danych słownika (jestem prawie pewien, że ktoś to zrobił).

Potrzebujesz dwóch pól w tabeli: wordiusage

Zamień frazę w tablicę ciągów (każde słowo jest ciągiem) i niezależnie:

select 'usage' from Dictionary WHERE 'word' = $word; 

To ciężkie rozwiązanie, ale z którego korzystałem w przeszłości.

mheinke
źródło
5
Zakłada się, że każde słowo ma tylko jeden możliwy POS i zapewniam cię, że wcale tak nie jest.
microtherion
Uzgodnione - nie ma możliwości, aby to możliwe (przynajmniej w języku angielskim) działało ze wszystkimi słowami, które mogą działać jak rzeczowniki, czasowniki itp., W zależności od kontekstu.
Derek