Sunday 5 November 2017

Enkel Bevegelse Gjennomsnittet Python


Dette er en Python wrapper for TA-LIB basert på Cython i stedet for SWIG. Fra hjemmesiden: TA-Lib er mye brukt av handelsprogramvareutviklere som krever å utføre teknisk analyse av finansielle markedsdata. Inkluderer 150 indikatorer som ADX, MACD, RSI, Stochastic, Bollinger Bands, etc. Lysestake mønster anerkjennelse Open-source API for CC, Java, Perl, Python og 100 Managed De originale Python bindingene bruker SWIG som dessverre er vanskelig å installere og arent så effektive som de kunne være. Derfor bruker dette prosjektet Cython og Numpy til å binde seg effektivt til TA-Lib-produserende resultater 2-4 ganger raskere enn SWIG-grensesnittet. Installer TA-Lib eller Les dokumentene I likhet med TA-Lib, gir funksjonsgrensesnittet en lett innpakning av de eksponerte TA-Lib-indikatorene. Hver funksjon returnerer et output-array og har standardverdier for parametrene, med mindre det angis som søkeordargumenter. Vanligvis vil disse funksjonene ha en innledende tilbakekallingsperiode (et nødvendig antall observasjoner før en utgang genereres) satt til NaN. Alle de følgende eksemplene bruker funksjonen API: Beregn et enkelt glidende gjennomsnitt av de lukkede prisene: Beregning av bollinger-band, med triple eksponensielt glidende gjennomsnitt: Beregning av momentum av de nære prisene, med en tidsperiode på 5: Abstrakt API Hurtigstart Hvis du er allerede kjent med bruk av funksjonen API, bør du føle deg hjemme ved hjelp av abstrakt API. Hver funksjon tar samme innspill, passert som en ordbok med Numpy-arrays: Funksjoner kan enten importeres direkte eller instantiated etter navn: Derfra er anropsfunksjoner i utgangspunktet det samme som funksjonen API: Lær om mer avansert bruk av TA-Lib her . Støttede indikatorer Vi kan vise alle TA-funksjonene som støttes av TA-Lib, enten som en liste eller som en dikt sortert etter gruppe (f. eks. Overlap Studies, Momentum Indicators, etc): Funksjonsgrupper1 Språkbehandling og Python Det er lett å ta hånden på millioner av tekstord. Hva kan vi gjøre med det, forutsatt at vi kan skrive noen enkle programmer I dette kapitlet tar vi godt imot følgende spørsmål: Hva kan vi oppnå ved å kombinere enkle programmeringsteknikker med store mengder tekst Hvordan kan vi automatisk trekke ut nøkkelord og setninger som oppsummerer stil og innhold i en tekst Hvilke verktøy og teknikker gir Python-programmeringsspråket et slikt arbeid Hva er noen av de interessante utfordringene ved naturlig språkbehandling Dette kapitlet er delt inn i seksjoner som hopper mellom to ganske forskjellige stiler. I kvotedatamaskinen med languagequot-seksjoner vil vi ta på seg noen språklig motiverte programmeringsoppgaver uten å nødvendigvis forklare hvordan de fungerer. I quotcloseren ser på Pythonquot-seksjoner, vil vi systematisk gjennomgå nøkkelprogrammeringskonsepter. Godt flagg de to stilene i seksjonstitlene, men senere kapitler vil blande begge stilene uten å være så upfront om den. Vi håper denne innføringsstilen gir deg en autentisk smak av hva som kommer senere, mens du dekker en rekke elementære begreper i lingvistikk og datavitenskap. Hvis du har grunnleggende kjennskap til begge områdene, kan du hoppe over til 1,5. Vi vil gjenta viktige punkter i senere kapitler, og hvis du savner noe, kan du enkelt konsultere det elektroniske referansematerialet på nltk. org. Hvis materialet er helt nytt for deg, vil dette kapittelet gi flere spørsmål enn det svarer, spørsmål som tas opp i resten av denne boken. 1.1 Computing with Language: Tekster og ord Var alt godt kjent med tekst, siden vi leser og skriver det hver dag. Her behandler vi tekst som rådata for programmene vi skriver, programmer som manipulerer og analyserer det på en rekke interessante måter. Men før vi kan gjøre dette, må vi begynne med Python-tolken. Komme i gang med Python En av de vennlige tingene om Python er at den lar deg skrive direkte inn i den interaktive tolken 8212, programmet som kjører Python-programmer. Du kan få tilgang til Python tolken ved hjelp av et enkelt grafisk grensesnitt kalt Interactive DeveLopment Environment (IDLE). På en Mac finner du dette under Programmering 8594 MacPython. og på Windows under Alle programmer 8594 Python. Under Unix kan du kjøre Python fra skallet ved å skrive tomgang (hvis dette ikke er installert, prøv å skrive python). Tolken skal skrive ut en blurb om Python-versjonen, bare kontroller at du kjører Python 2.4 eller 2.5 (her er det 2.5.1): Din sving: Prøv å søke etter andre ord for å lagre re-typing, du kan kanskje bruke opp - arrow, Ctrl-up-pil eller Alt-p for å få tilgang til forrige kommando og endre ordet som søkte. Du kan også prøve søk på noen av de andre teksten vi har tatt med. For eksempel, søk Sans og Sensibility for word affection. bruker text2.concordance (quotaffectionquot). Søk i Genesisboken for å finne ut hvor lenge noen levde, ved hjelp av text3.concordance (quotivivedquot). Du kan se på tekst4. Inaugural Address Corpus. å se eksempler på engelsk som går tilbake til 1789, og søke etter ord som nasjon. skrekk. gud for å se hvordan disse ordene har blitt brukt annerledes over tid. Weve inkluderer også tekst5. NPS Chat Corpus. søk dette etter ukonvensjonelle ord som im. ur. lol. (Merk at dette corpus er usensurert) Når du har brukt litt tid på å undersøke disse teksten, håper vi at du har en ny følelse av rikdom og mangfold av språk. I neste kapittel lærer du hvordan du får tilgang til et bredere spekter av tekst, inkludert tekst på andre språk enn engelsk. En konkordanse tillater oss å se ord i sammenheng. For eksempel så vi at monstrous skjedde i sammenhenger som bildene og størrelsen. Hvilke andre ord vises i et lignende område av sammenhenger Vi kan finne ut ved å legge til uttrykket som ligner navnet på den aktuelle teksten, og deretter sette inn det relevante ordet i parentes: Vær oppmerksom på at vi får forskjellige resultater for forskjellige tekster. Austen bruker dette ordet ganske annerledes enn Melville for henne, monstrous har positive konnotasjoner, og noen ganger fungerer som en forsterker som ordet veldig. Begrepet commoncontexts tillater oss å undersøke bare sammenhenger som deles av to eller flere ord, som monstre og veldig. Vi må legge inn disse ordene med firkantede parenteser og parenteser, og skille dem med komma: Din sving: Velg et annet par ord og sammenlign deres bruk i to forskjellige tekster ved hjelp av lignende () og commoncontexts () - funksjonene. Det er en ting å automatisk oppdage at et bestemt ord forekommer i en tekst, og å vise noen ord som vises i samme kontekst. Vi kan imidlertid også bestemme plasseringen av et ord i teksten: hvor mange ord fra begynnelsen vises det. Denne posisjonsinformasjonen kan vises ved hjelp av en spredningsdiagram. Hver stripe representerer en forekomst av et ord, og hver rad representerer hele teksten. I 1.2 ser vi noen slående mønstre for ordbruk i løpet av de siste 220 årene (i en kunstig tekst konstruert ved å bli med i teksten til Inaugural Address Corpus end-to-end). Du kan produsere denne plottet som vist nedenfor. Du kan gjerne prøve flere ord (for eksempel fri konstitusjon) og forskjellige tekster. Kan du forutsi spredningen av et ord før du ser det som før, pass på å få sitater, kommaer, parenteser og parentes akkurat riktig. Figur 1.2. Lexical Dispersion Plot for Words i USAs Presidential Inaugural Addresses: Dette kan brukes til å undersøke endringer i språkbruk over tid. Viktig: Du må ha Pythons NumPy og Matplotlib-pakker installert for å kunne produsere grafiske tomter som brukes i denne boken. Vennligst se nltk. org for installasjonsinstruksjoner. Nå, bare for moro skyld, kan vi prøve å generere litt tilfeldig tekst i de forskjellige stilene vi nettopp har sett. For å gjøre dette skriver vi navnet på teksten etterfulgt av begrepet generere. (Vi trenger å inkludere parentesen, men det er ingenting som går mellom dem.) Merk at første gang du kjører denne kommandoen, er det sakte fordi det samler statistikk om ordsekvenser. Hver gang du kjører det, får du annen utdatatekst. Prøv nå å generere tilfeldig tekst i stil med en innledende adresse eller et Internett-chatrom. Selv om teksten er tilfeldig, bruker den vanlige ord og uttrykk fra kildeteksten, og gir oss en følelse av stil og innhold. (Hva mangler i denne tilfeldig genererte teksten) Når genererer produserer sin utgang, skilles intervallet fra det forrige ordet. Selv om dette ikke er riktig formatering for engelsk tekst, gjør vi det for å gjøre det klart at ord og tegnsetting er uavhengig av hverandre. Du vil lære mer om dette i 3. Telling vokabular Det mest åpenbare faktumet om tekster som kommer fra de foregående eksemplene er at de adskiller seg i det ordforrådet de bruker. I denne delen ser vi hvordan du bruker datamaskinen til å telle ordene i en tekst på en rekke nyttige måter. Som før vil du hoppe rett inn og eksperimentere med Python-tolken, selv om du kanskje ikke har studert Python systematisk ennå. Test din forståelse ved å endre eksemplene, og prøv øvelsene i slutten av kapitlet. La oss begynne med å finne ut lengden på en tekst fra start til slutt, i form av ordene og tegnsettingstegnene som vises. Vi bruker begrepet len ​​for å få lengden på noe, som vel gjelder her til Genesisboken: Så Genesis har 44.764 ord og tegnsettingstegn, eller quottokens. quot Et token er det tekniske navnet på en sekvens av tegn 8212 som hårete . hans. eller :) 8212 som vi ønsker å behandle som en gruppe. Når vi teller antall tokens i en tekst, si at uttrykket skal være eller ikke være. vi teller forekomster av disse sekvensene. I vårt eksempeleksempel er det således to forekomster av å. to av være. og en hver av eller og ikke. Men det er bare fire forskjellige ordforrådsposter i denne setningen. Hvor mange forskjellige ord inneholder boken Genesis For å utarbeide dette i Python må vi stille spørsmålet litt annerledes. Ordforrådene i en tekst er bare settet med tokens som det bruker, siden i et sett blir alle duplikatene samlet sammen. I Python kan vi få ordforrådets elementer av tekst3 med kommandoen: sett (tekst3). Når du gjør dette, vil mange skjermbilder fly forbi. Prøv nå følgende: Ved å pakke sortert () rundt Python uttrykkssettet (tekst3). vi får en sortert liste over ordforrådsposter, som begynner med forskjellige tegnsettingstegn og fortsetter med ord som begynner med A. Alle aktiverte ord går foran små ord. Vi oppdager størrelsen på vokabularet indirekte ved å be om antall elementer i settet, og igjen kan vi bruke len for å skaffe dette nummeret. Selv om den har 44.764 tokens, har denne boken bare 2.789 forskjellige ord, eller kvotetyper. Quot En ordtype er skjemaet eller stavemåten av ordet uavhengig av sine spesifikke hendelser i en tekst 8212 som er ordet betraktet som et unikt element av ordforråd. Våre teller på 2 789 elementer vil inneholde tegnsymboler, så vi vil vanligvis kalle disse unike gjenstandstyper i stedet for ordtyper. Nå kan vi beregne et mål på tekstens leksikalske rikdom. Det neste eksemplet viser at hvert ord brukes 16 ganger i gjennomsnitt (vi må sørge for at Python bruker flytende punktdeling): Legg merke til at indeksene våre starter fra null: sendt element null, skrevet send0. er det første ordet, word1. mens sendt element 9 er word10. Årsaken er enkel: i det øyeblikket Python får tilgang til innholdet i en liste fra dataminnet, er det allerede ved det første elementet vi må fortelle hvor mange elementer fremover å gå. Således forlater null trinn fremover det ved det første elementet. Denne praksisen med å telle fra null er i utgangspunktet forvirrende, men typisk for moderne programmeringsspråk. Du vil raskt få tak i det hvis du har mestret systemet med å telle århundrer hvor 19XY er et år i det 20. århundre, eller hvis du bor i et land hvor etasjes etasjer er nummerert fra 1 og så går opp n-1 Trapper flytter deg til nivå n. Nå, hvis vi ved et uhell bruker en indeks som er for stor, får vi en feil: Denne gangen er det ikke en syntaksfeil, fordi programfragmentet er syntaktisk korrekt. I stedet er det en runtime feil. og det produserer en Traceback-melding som viser sammenhengen til feilen, etterfulgt av navnet på feilen, IndexError. og en kort forklaring. La oss se nærmere på skiver ved å bruke vår kunstige setning igjen. Her bekrefter vi at stykket 5: 8 inneholder sendte elementer i indeksene 5, 6 og 7: Vi kan endre et element av en liste ved å tildele til en av indeksverdiene. I det neste eksemplet setter vi sent0 til venstre for likestegnet. Vi kan også erstatte et helt stykke med nytt materiale. En konsekvens av denne siste endringen er at listen bare har fire elementer, og å få tilgang til en senere verdi genererer en feil. Din sving: Ta noen minutter til å definere en egen setning og endre individuelle ord og grupper av ord (skiver) ved hjelp av de samme metodene som tidligere ble brukt. Kontroller din forståelse ved å prøve øvelsene på lister på slutten av dette kapittelet. Fra begynnelsen av 1.1. Du har fått tilgang til tekst som heter tekst1. text2. og så videre. Det lagret mye å skrive for å kunne henvise til en 250 000 ordbok med et kort navn som dette. Generelt kan vi legge opp navn på alt vi bryr oss å beregne. Vi gjorde dette selv i de forrige avsnittene, f. eks. definerer en variabel sendt1. som følger: Slike linjer har formen: variabelt uttrykk. Python vil evaluere uttrykket og lagre resultatet til variabelen. Denne prosessen kalles oppgave. Det genererer ingen utdata du må skrive variabelen på en egen linje for å inspisere innholdet. Tilsvarende tegn er litt misvisende, siden informasjonen beveger seg fra høyre til venstre. Det kan bidra til å tenke på det som en venstre-pil. Navnet på variabelen kan være alt du liker, f. eks. mysent. setning . xyzzy. Det må starte med et brev, og kan inkludere tall og understreker. Her er noen eksempler på variabler og oppgaver: Husk at aktiverte ord vises før små ord i sorterte lister. Legg merke til i forrige eksempel at vi delte definisjonen av mysent over to linjer. Python-uttrykk kan deles på flere linjer, så lenge dette skjer innenfor alle slags braketter. Python bruker sitatet. Sitat ledetekst for å indikere at mer innsats er forventet. Det spiller ingen rolle hvor mye innrykk er brukt i disse fortsettelseslinjene, men noen innrykk gjør det vanligvis lettere å lese. Det er godt å velge meningsfulle variable navn for å minne deg på 8212 og for å hjelpe noen andre som leser Python-koden 8212 hva koden din er ment å gjøre. Python forsøker ikke å gi mening om navnene det følger blindt dine instruksjoner, og protesterer ikke hvis du gjør noe forvirrende, for eksempel en to eller to 3. Den eneste begrensningen er at et variabelt navn ikke kan være noen av Pythons reserverte ord, for eksempel def. hvis. ikke . og importere. Hvis du bruker et reservert ord, vil Python produsere en syntaksfeil: Vær forsiktig med ditt valg av navn (eller identifikatorer) for Python-variabler. Først bør du starte navnet med et brev, eventuelt etterfulgt av tall (0 til 9) eller bokstaver. Dermed er abc23 fint, men 23abc vil forårsake en syntaksfeil. Navnene er store og små bokstaver, noe som betyr at myVar og myvar er forskjellige variabler. Variable navn kan ikke inneholde hvite plass, men du kan skille ord ved hjelp av et understrek, f. eks. myvar. Vær forsiktig så du ikke legger inn en bindestrek i stedet for en underskrift: min-var er feil, siden Python tolker sitatet som et minustegn. Noen av metodene vi brukte for å få tilgang til elementene i en liste, fungerer også med individuelle ord eller strenger. For eksempel kan vi tilordne en streng til en variabel. indeksere en streng. og skar en streng: Vi kan også utføre multiplikasjon og tillegg med strenger: Vi kan bli med på ordene i en liste for å lage en enkelt streng, eller dele en streng i en liste som følger: Vi kommer tilbake til emnet strenger i 3. For tiden har vi to viktige byggeklosser 8212 lister og strenger 8212 og er klare til å komme tilbake til noen språkanalyse. 1.3 Beregning med språk: Enkel statistikk Lar oss gå tilbake til utforskningen av måtene vi kan ta med våre beregningsressurser på store mengder tekst. Vi begynte denne diskusjonen i 1.1. og så hvordan man søker etter ord i kontekst, hvordan man formulerer ordforråd i en tekst, hvordan man genererer tilfeldig tekst i samme stil, og så videre. I denne delen tar vi opp spørsmålet om hva som skiller en tekst, og bruker automatiske metoder for å finne karakteristiske ord og uttrykk for en tekst. Som i 1.1. Du kan prøve nye funksjoner på Python-språket ved å kopiere dem til tolken, og du vil lære om disse funksjonene systematisk i følgende avsnitt. Før du fortsetter videre, kan du gjerne kontrollere forståelsen av den siste delen ved å forutsi utdataene fra følgende kode. Du kan bruke tolken til å sjekke om du har det riktig. Hvis du ikke er sikker på hvordan du gjør denne oppgaven, vil det være lurt å gå gjennom forrige seksjon før du fortsetter videre. Frekvensfordeling Hvordan kan vi automatisk identifisere ordene til en tekst som er mest informativ om emnet og sjangeren av teksten. Forestill deg hvordan du kan finne ut om du finner de 50 hyppigste ordene i en bok. En metode ville være å holde en tally for hvert ordforråd, som vist i 1.3. Tallyen ville trenge tusenvis av rader, og det ville være en overordentlig arbeidskrevende prosess 8212 så arbeidskrevende at vi helst ville tildele oppgaven til en maskin. Figur 1.3. Telling av ord som vises i en tekst (en frekvensfordeling) Tabellen i 1.3 er kjent som en frekvensfordeling. og det forteller oss frekvensen av hvert ordforråd i teksten. (Generelt kan det telle noen form for observerbar hendelse.) Det er en quotdistributionquot fordi det forteller oss hvordan det totale antall ordtokener i teksten er fordelt over ordforrådspostene. Siden vi ofte trenger frekvensfordeler i språkbehandling, tilbyr NLTK innebygd støtte for dem. Lar oss bruke FreqDist til å finne de 50 hyppigste ordene til Moby Dick. Prøv å finne ut hva som skjer her, og les deretter forklaringen som følger. Når vi først påberoper FreqDist. Vi sender navnet på teksten som et argument. Vi kan inspisere totalt antall ord (quotoutcomesquot) som har blitt talt opp 8212 260.819 i tilfelle Moby Dick. Ekspresjonstastene () gir oss en liste over alle de forskjellige typene i teksten. og vi kan se på de første 50 av disse ved å kutte listen. Din sving: Prøv det forrige frekvensfordelingseksemplet for deg selv, for tekst2. Vær forsiktig med å bruke de riktige parentesene og store bokstaver. Hvis du får en feilmelding NameError: navn FreqDist er ikke definert. du må starte arbeidet med fra nltk. book import Gjør noen ord produsert i det siste eksemplet oss til å forstå temaet eller sjangeren til denne teksten. Bare ett ord, hval. er litt informativ Det skjer over 900 ganger. Resten av ordene forteller ingenting om teksten de er bare engelsk quotplumbing. quot Hvilken andel av teksten er tatt opp med slike ord Vi kan generere en kumulativ frekvensplott for disse ordene, ved hjelp av fdist1.plot (50, cumulativeTrue). å produsere grafen i 1.4. Disse 50 ordene står for nesten halvparten av boken Figur 1.4. Kumulativ frekvensplott for 50 mest brukte ord i Moby Dick. disse står for nesten halvparten av tokens. Hvis de hyppige ordene ikke hjelper oss, hva med ordene som bare forekommer en gang, de såkalte hapaxene. Se dem ved å skrive fdist1.hapaxes (). Denne listen inneholder leksikograf. cetological. smuglergods. expostulations. og ca 9000 andre. Det ser ut til at det er for mange sjeldne ord, og uten å se konteksten kan vi antagelig ikke gjette hva halvparten av hapaxene betyr i hvert fall. Siden ikke hyppige eller sjeldne ord hjelper, må vi prøve noe annet. Finkornet utvalg av ord Neste ser vi på de lange ordene i en tekst, kanskje disse vil være mer karakteristiske og informative. For dette tilpasser vi noen notater fra settteori. Vi ønsker å finne ordene fra ordforrådet av teksten som er over 15 tegn lange. La oss kalle denne egenskapen P. slik at P (w) er sant hvis og bare hvis w er over 15 tegn langt. Nå kan vi uttrykke ordene av interesse ved hjelp av matematisk settnotasjon som vist i (1a). Dette betyr quottesett av alle w slik at w er et element av V (ordforrådet) og w har egenskap P kvot. Fra dette ser vi at den hyppigste ordlengden er 3, og at lengdene 3 står for omtrent 50 000 (eller 20) av ordene som utgjør boken. Selv om vi ikke vil forfølge det her, kan videre analyse av ordlengde hjelpe oss å forstå forskjeller mellom forfattere, sjangere eller språk. 1.2 oppsummerer funksjonene definert i frekvensfordeling. Disse uttrykkene har formen f (w) for. eller w. f () for. . hvor f er en funksjon som opererer på et ord for å beregne lengden, eller å konvertere den til store versjoner. For nå trenger du ikke å forstå forskjellen mellom notasjonene f (w) og w. f (). I stedet lærer du bare dette Python-idiomet som utfører samme operasjon på hvert element i en liste. I de foregående eksemplene går det gjennom hvert ord i tekst1. tilordne hver til en gang til variabelen w og utføre den angitte operasjonen på variabelen. Notasjonen som nettopp er beskrevet kalles en quotlist comprehension. quot Dette er vårt første eksempel på et Python-idiom, en fast notasjon som vi bruker vanlige uten å plage å analysere hver gang. Mastering av slike idiomer er en viktig del av å bli en flytende Python programmerer. Lar komme tilbake til spørsmålet om ordforrådsstørrelse, og bruk samme idiom her: Nå som vi ikke er dobbelttelgende ord som Dette og dette. som bare er forskjellig i kapitalisering, slettet vi 2.000 av ordforrådstellingen. Vi kan gå et skritt videre og eliminere tall og tegnsetting fra ordforrådet ved å filtrere ut noen ikke-alfabetiske elementer: Dette eksemplet er litt komplisert: det senker alle de rent alfabetiske elementene . Kanskje det ville vært enklere å bare telle små bokstaver, men dette gir feil svar (hvorfor). Ikke bekymre deg hvis du ikke føler deg trygg med listeforståelser ennå, siden du vil se mange flere eksempler sammen med forklaringer i de følgende kapitlene. Nested Code Blocks De fleste programmeringsspråk tillater oss å utføre en blokk med kode når et betinget uttrykk. eller hvis erklæring er oppfylt. Vi har allerede sett eksempler på betingede tester i kode som w for w i sent7 hvis len (w) lt 4. I det følgende programmet har vi opprettet en variabel som heter ord som inneholder strengverdien katten. If-setningen kontrollerer om test len ​​(word) lt 5 er sant. Det er, så kroppen av if-setningen er påkalt og utskriftserklæringen blir utført, og viser en melding til brukeren. Husk å legge inn utskriftserklæringen ved å skrive inn fire mellomrom. Dette kalles en loop fordi Python kjører koden i sirkulær mote. Det starter ved å utføre oppdragsordet Ring. effektivt å bruke ordvariabelen for å nevne det første elementet i listen. Deretter viser den verdien av ordet til brukeren. Deretter går det tilbake til forklaringen, og utfører oppdragsordet meg. før du viser denne nye verdien til brukeren, og så videre. Det fortsetter på denne måten til hvert element i listen er behandlet. Looping with Conditions Nå kan vi kombinere om og for uttalelser. Vi slår over hvert element i listen, og skriv ut elementet bare hvis det slutter med bokstaven l. Vel velg et annet navn for variabelen for å vise at Python ikke forsøker å gi mening om variable navn. Du vil legge merke til at hvis og for uttalelser har en kolon på slutten av linjen, før innrykket begynner. Faktisk er alle Python-kontrollstrukturer ender med en kolon. Tykktarmen indikerer at gjeldende utsagn relaterer seg til den innrykkede blokk som følger. Vi kan også spesifisere en handling som skal tas hvis betingelsen for if-setningen ikke er oppfylt. Her ser vi elif (annet om) setningen, og ellers uttalelsen. Legg merke til at disse også har kolonner før innrykkskoden. 1.5 Automatisk naturlig språkforståelse Vi har undersøkt språkbunn-opp, ved hjelp av tekster og Python programmeringsspråk. Men var også interessert i å utnytte vår kunnskap om språk og beregning ved å bygge nyttig språketeknologi. Nå, bruk anledningen nå for å gå tilbake fra nitty-gritty av koden for å male et større bilde av naturlig språkbehandling. På et rent praktisk nivå trenger vi alle hjelp til å navigere i universet av informasjon som er låst opp i tekst på nettet. Søkemotorer har vært avgjørende for veksten og populariteten til Internett, men har noen mangler. Det tar kunnskap, kunnskap og litt flaks å trekke ut svar på slike spørsmål som: Hvilke turiststeder kan jeg besøke mellom Philadelphia og Pittsburgh på et begrenset budsjett Hva sier eksperter om digitale speilreflekskameraer Hvilke spådommer om stålmarkedet ble gjort av troverdige kommentatorer i den siste uken Å få en datamaskin til å svare på dem, involverer automatisk en rekke språkbehandlingsoppgaver, inkludert informasjonsutvinning, innledning og oppsummering, og må utføres på en skala og med en robusthet som fortsatt er utenfor vår nåværende evner. På et mer filosofisk nivå har en langvarig utfordring innen kunstig intelligens vært å bygge intelligente maskiner, og en stor del av intelligent oppførsel er å forstå språk. I mange år har dette målet blitt sett på som for vanskelig. Men da NLP-teknologiene blir mer modne, og robuste metoder for analyse av ubegrenset tekst blir mer utbredt, har utsikter til naturlig språkforståelse dukket opp igjen som et troverdig mål. I denne delen beskriver vi noen språkkunnskapsteknologier for å gi deg en følelse av de interessante utfordringene som venter på deg. Word Sense Disambiguation I ordforståelse disambiguation ønsker vi å finne ut hvilken følelse av et ord som var ment i en gitt sammenheng. Tenk på de tvetydige ordene tjene og parabolen: server. hjelp med mat eller drikke hold et kontor legg ball i spill parabolen. tallerken av et måltid kommunikasjonsapparat I en setning som inneholder uttrykket: han serverte parabolen. du kan oppdage at både servering og parabolen blir brukt med matens betydning. Det er usannsynlig at temaet diskusjonen skiftet fra sport til servise i løpet av tre ord. Dette ville tvinge deg til å finne ut bisarre bilder, som en tennisprodusent som tok ut frustrasjonene sine på et kinesisk te-sett som ble lagt ut ved siden av retten. Med andre ord disambiguerer vi automatisk ord ved hjelp av kontekst, og utnytter det enkle faktum at nærliggende ord har nært beslektede betydninger. Som et annet eksempel på denne kontekstuelle effekten, vurder ordet av. som har flere betydninger, f. eks. boken av Chesterton (agent 8212 Chesterton var forfatteren av boken) koppen ved ovnen (lokal 8212 komfyren er hvor koppen er) og sendes innen fredag ​​(tidsmodell 8212 fredag ​​er tidspunktet for innleveringen). Vær oppmerksom på (3c) at meningen med det kursiverte ordet hjelper oss å tolke betydningen av. De tapte barna ble funnet av søkerne (agentive) De tapte barna ble funnet av fjellet (lokativ) De tapte barna ble funnet på ettermiddagen (temporal) Pronoun Resolution En dypere språkforståelse er å utarbeide kvote som gjorde hva som til hvem som 8212 dvs. å oppdage fag og objekter av verb. Du lærte å gjøre dette i grunnskolen, men det er vanskeligere enn du kanskje tror. I setningen stjal tyven maleriene, det er lett å fortelle hvem som utførte stjeleaksjonen. Tenk på tre mulige følgende setninger i (4c). og prøv å finne ut hva som ble solgt, fanget og funnet (ett tilfelle er tvetydig). Tyvene stjal maleriene. De ble senere solgt. Tyvene stjal maleriene. De ble deretter fanget. Tyvene stjal maleriene. De ble senere funnet. Svare på dette spørsmålet innebærer å finne forgrunnen til pronomen de. enten tyver eller malerier. Beregnende teknikker for å takle dette problemet inkluderer anaphora oppløsning 8212 som identifiserer hva et pronomen eller substantiv fraser refererer til 8212 og semantisk rollemerkning 8212 identifisere hvordan en substantiv setning relaterer til verbet (som agent, pasient, instrument og så videre). Generering av språkutgang Hvis vi automatisk kan løse slike problemer med språkforståelse, vil vi kunne gå videre til oppgaver som involverer å generere språkutgang, for eksempel spørsmålsvar og maskinoversettelse. I det første tilfellet skal en maskin kunne svare på brukerens spørsmål om samling av tekster: For å avgjøre om hypotesen støttes av teksten, trenger systemet følgende bakgrunnskunnskaper: (i) hvis noen er en forfatter av en bok, så har heshe skrevet den boken (ii) hvis noen er redaktør av en bok, så har heshe ikke skrevet (alle) den boken (iii) hvis noen er redaktør eller forfatter av atten bøker, kan man ikke konkludere den heshe er forfatter av atten bøker. Begrensninger av NLP Til tross for de forskningsmessige fremskrittene i oppgaver som RTE, kan naturtspråkssystemer som er blitt distribuert til virkelige applikasjoner, fortsatt ikke utføre sunnhetsfornuft eller tegne kunnskap på verdensplan på en generell og robust måte. Vi kan vente på at disse vanskelige kunstige intelligensproblemer skal løses, men i mellomtiden er det nødvendig å leve med noen alvorlige begrensninger på resonnementet og kunnskapskapasiteten til naturlige språksystemer. Derfor har et viktig mål for NLP-undersøkelsen, rett fra begynnelsen, vært å gjøre fremskritt på den vanskelige oppgaven med å bygge teknologier som citerer språk, citerer bruk av overfladiske, men kraftige teknikker i stedet for ubegrenset kunnskap og resonnementskapasitet. Faktisk er dette et av målene i denne boken, og vi håper å utstyre dere med kunnskap og ferdigheter til å bygge nyttige NLP-systemer og bidra til den langsiktige ambisjonen om å bygge intelligente maskiner. 1.6 Sammendrag Tekster er representert i Python ved hjelp av lister: Monty. Python. Vi kan bruke indeksering, skiving og len () - funksjonen på lister. Et ord quottokenquot er et bestemt utseende av et gitt ord i en tekst. Et ord quottypequot er den unike form for ordet som en bestemt bokstavssekvens. Vi teller ordtokener ved hjelp av len (tekst) og ordtyper ved hjelp av len (sett (tekst)). Vi får ordforrådet til en tekst t ved hjelp av sortert (sett (t)). Vi opererer på hvert element i en tekst ved hjelp av f (x) for x i tekst. For å utlede vokabularet, kollapserende saksdifferanser og ignorerer tegnsetting, kan vi skrive sett (w. lower () for w i tekst hvis w. isalpha ()). Vi behandler hvert ord i en tekst ved hjelp av en for setning, for eksempel for w i t: eller for ord i tekst:. Dette må følges av kolon karakteren og en innrykkende blokk med kode som skal utføres hver gang gjennom løkken. We test a condition using an if statement: if len(word) lt 5: . This must be followed by the colon character and an indented block of code, to be executed only if the condition is true. A frequency distribution is a collection of items along with their frequency counts (e. g. the words of a text and their frequency of appearance). A function is a block of code that has been assigned a name and can be reused. Functions are defined using the def keyword, as in def mult (x, y) x and y are parameters of the function, and act as placeholders for actual data values. A function is called by specifying its name followed by one or more arguments inside parentheses, like this: mult(3, 4) . e. g. len(text1) . 1.7 Further Reading This chapter has introduced new concepts in programming, natural language processing, and linguistics, all mixed in together. Many of them are consolidated in the following chapters. However, you may also want to consult the online materials provided with this chapter (at nltk. org ), including links to additional background materials, and links to online NLP systems. You may also like to read up on some linguistics and NLP-related concepts in Wikipedia (e. g. collocations, the Turing Test, the type-token distinction). You should acquaint yourself with the Python documentation available at docs. python. org . including the many tutorials and comprehensive reference materials linked there. A Beginners Guide to Python is available at wiki. python. orgmoinBeginnersGuide . Miscellaneous questions about Python might be answered in the FAQ at python. orgdocfaqgeneral . As you delve into NLTK, you might want to subscribe to the mailing list where new releases of the toolkit are announced. There is also an NLTK-Users mailing list, where users help each other as they learn how to use Python and NLTK for language analysis work. Details of these lists are available at nltk. org . For more information on the topics covered in 1.5. and on NLP more generally, you might like to consult one of the following excellent books: Indurkhya, Nitin and Fred Damerau (eds, 2010) Handbook of Natural Language Processing (Second Edition) Chapman amp HallCRC. 2010. (Indurkhya amp Damerau, 2010) (Dale, Moisl, amp Somers, 2000) Jurafsky, Daniel and James Martin (2008) Speech and Language Processing (Second Edition). Prentice Hall. (Jurafsky amp Martin, 2008) Mitkov, Ruslan (ed, 2003) The Oxford Handbook of Computational Linguistics . Oxford University Press. (second edition expected in 2010). (Mitkov, 2002) The Association for Computational Linguistics is the international organization that represents the field of NLP. The ACL website ( aclweb. org ) hosts many useful resources, including: information about international and regional conferences and workshops the ACL Wiki with links to hundreds of useful resources and the ACL Anthology. which contains most of the NLP research literature from the past 50 years, fully indexed and freely downloadable. Some excellent introductory Linguistics textbooks are: (Finegan, 2007). (OGrady et al, 2004). (OSU, 2007). You might like to consult LanguageLog. a popular linguistics blog with occasional posts that use the techniques described in this book. 1.8 Exercises 9788 Try using the Python interpreter as a calculator, and typing expressions like 12 (4 1) . 9788 Given an alphabet of 26 letters, there are 26 to the power 10, or 26 10 . ten-letter strings we can form. That works out to 141167095653376L (the L at the end just indicates that this is Pythons long-number format). How many hundred-letter strings are possible 9788 The Python multiplication operation can be applied to lists. What happens when you type Monty. Python 20 . or 3 sent1 9788 Review 1.1 on computing with language. How many words are there in text2 . How many distinct words are there 9788 Compare the lexical diversity scores for humor and romance fiction in 1.1. Which genre is more lexically diverse 9788 Produce a dispersion plot of the four main protagonists in Sense and Sensibility . Elinor, Marianne, Edward, and Willoughby. What can you observe about the different roles played by the males and females in this novel Can you identify the couples 9788 Find the collocations in text5 . 9788 Consider the following Python expression: len(set(text4)) . State the purpose of this expression. Describe the two steps involved in performing this computation. 9788 Review 1.2 on lists and strings. Define a string and assign it to a variable, e. g. mystring My String (but put something more interesting in the string). Print the contents of this variable in two ways, first by simply typing the variable name and pressing enter, then by using the print statement. Try adding the string to itself using mystring mystring . or multiplying it by a number, e. g. mystring 3 . Notice that the strings are joined together without any spaces. How could you fix this 9788 Define a variable mysent to be a list of words, using the syntax mysent quotMyquot. quotsentquot (but with your own words, or a favorite saying). Use. join(mysent) to convert this into a string. Use split() to split the string back into the list form you had to start with. 9788 Define several variables containing lists of words, e. g. phrase1 . phrase2 . og så videre. Join them together in various combinations (using the plus operator) to form whole sentences. What is the relationship between len(phrase1 phrase2) and len(phrase1) len(phrase2) 9788 Consider the following two expressions, which have the same value. Which one will typically be more relevant in NLP Why 9788 We have seen how to represent a sentence as a list of words, where each word is a sequence of characters. What does sent122 do Why Experiment with other index values. 9788 The first sentence of text3 is provided to you in the variable sent3 . The index of the in sent3 is 1, because sent31 gives us the . What are the indexes of the two other occurrences of this word in sent3 9788 Review the discussion of conditionals in 1.4. Find all words in the Chat Corpus ( text5 ) starting with the letter b. Show them in alphabetical order. 9788 Type the expression range(10) at the interpreter prompt. Now try range(10, 20) . range(10, 20, 2) . and range(20, 10, -2) . We will see a variety of uses for this built-in function in later chapters. 9681 Use text9.index() to find the index of the word sunset. Youll need to insert this word as an argument between the parentheses. By a process of trial and error, find the slice for the complete sentence that contains this word. 9681 Using list addition, and the set and sorted operations, compute the vocabulary of the sentences sent1 . sent8 . 9681 What is the difference between the following two lines Which one will give a larger value Will this be the case for other textsThe scikits. timeseries module is no longer undergoing active development. Det er en enestående liste over feil som ikke er løst. Planen er at kjernefunksjonaliteten til denne modulen skal implementeres i pandas. Hvis du ønsker å se denne modulen leve uavhengig av pandaer, vær så snill å gaffel koden og ta den over. Scikits. timeseries-modulen gir klasser og funksjoner for å manipulere, rapportere og plotte tidsserier av forskjellige frekvenser. Fokus ligger på praktisk datatilgang og manipulering mens man utnytter den eksisterende matematiske funksjonaliteten i numpy og scipy. If the following scenarios sound familiar to you, then you will likely find the scikits. timeseries module useful: Compare many time series with different ranges of data (eg. stock prices) Create time series plots with intelligently spaced axis labels Convert a daily time series to monthly by taking the average value during each month Work with data that has missing values Determine the last business day of the previous monthquarteryear for reporting purposes Compute a moving standard deviation efficiently These are just some of the scenarios that are made very simple with the scikits. timeseries module. Documentation

No comments:

Post a Comment