Enkel glidande medelvärde python


Detta är ett Python-omslag för TA-LIB baserat på Cython istället för SWIG. Från hemsidan: TA-Lib används ofta av handelsutvecklare som behöver utföra teknisk analys av finansmarknadsdata. Innehåller 150 indikatorer som ADX, MACD, RSI, Stochastic, Bollinger Bands, etc. Candlestick-mönsterigenkänning Open-source API för CC, Java, Perl, Python och 100 Managed De ursprungliga Pythonbindningarna använder SWIG som tyvärr är svåra att installera och arent så effektiva som de kunde vara. Därför använder detta projekt Cython och Numpy för att effektivt och rent binda till TA-Lib-producerande resultat 2-4 gånger snabbare än SWIG-gränssnittet. Installera TA-Lib eller läsa dokumenten Liknande TA-Lib, ger funktionsgränssnittet ett lättviktspaket av de exponerade TA-Lib-indikatorerna. Varje funktion returnerar en utsignal och har standardvärden för sina parametrar, om inte specificeras som sökordsargument. Typiskt kommer dessa funktioner att ha en initial lookback-period (ett nödvändigt antal observationer innan en produktion genereras) inställd på NaN. Alla följande exempel använder funktion API: Beräkna ett enkelt glidande medelvärde av de stängda priserna: Beräkna bollingerband, med triple exponentiell glidande medelvärde: Beräkning av momentum för de stängda priserna, med en tidsperiod på 5: Sammanfattning API Snabbstart Om du som redan är bekant med att använda funktionen API, borde du känna dig riktigt hemma med hjälp av abstrakt API. Varje funktion har samma inmatning, skickad som en ordbok för Numpy-arrays: Funktioner kan antingen importeras direkt eller instantieras med namn: Därifrån är samtalsfunktioner i stort sett samma som funktion API: Läs om mer avancerad användning av TA-Lib här . Stödda indikatorer Vi kan visa alla TA-funktioner som stöds av TA-Lib, antingen som en lista eller som en dikt sorterad efter grupp (t. ex. Överlappsstudier, Momentumindikatorer, etc): Funktionsgrupper1 Språkbehandling och Python Det är lätt att ta hand om oss på miljoner textord. Vad kan vi göra med det, förutsatt att vi kan skriva några enkla program I det här kapitlet är det bra att ta itu med följande frågor: Vad kan vi uppnå genom att kombinera enkla programmeringstekniker med stora mängder text Hur kan vi automatiskt extrahera nyckelord och fraser som sammanfattar stil och innehåll i en text Vilka verktyg och tekniker tillhandahåller Python-programmeringsspråket för sådant arbete Vad är några av de intressanta utmaningarna för naturlig språkbehandling Detta kapitel är indelat i avsnitt som hoppa över två helt olika stilar. I quotcomputing med languagequot-sektioner kommer vi att ta på sig vissa språkligt motiverade programmeringsuppgifter utan att nödvändigtvis förklara hur de fungerar. I quotclosern titta på Pythonquot-sektioner kommer vi systematiskt att granska nyckelprogrammeringskoncept. Väl flagga de två stilarna i sektionstitlarna, men senare kapitel kommer att blanda båda stilar utan att vara så uppåt om den. Vi hoppas att denna introduktionsstil ger dig en autentisk smak av vad som kommer senare, samtidigt som du täcker en rad elementära begrepp inom lingvistik och datavetenskap. Om du har grundläggande kännedom om båda områdena kan du hoppa över till 1,5. Vi kommer att upprepa viktiga punkter i senare kapitel, och om du saknar något kan du enkelt se online referensmaterialet på nltk. org. Om materialet är helt nytt för dig kommer det här kapitlet att ta upp fler frågor än det svarar, frågor som tas upp i resten av denna bok. 1.1 Beräkning med språk: Texter och ord Var alla väldigt bekanta med texten, eftersom vi läser och skriver det varje dag. Här kommer vi att behandla text som rådata för de program vi skriver, program som manipulerar och analyserar det på en mängd intressanta sätt. Men innan vi kan göra det måste vi börja med Python tolken. Komma igång med Python En av de vänliga sakerna om Python är att du kan skriva direkt i den interaktiva tolken 8212 det program som ska köra dina Python-program. Du kan komma åt Python tolken med ett enkelt grafiskt gränssnitt som heter Interactive DeveLopment Environment (IDLE). På en Mac kan du hitta detta under Applikationer 8594 MacPython. och på Windows under Alla program 8594 Python. Under Unix kan du köra Python från skalet genom att skriva inaktiv (om det inte är installerat, försök att skriva python). Tolken skriver ut en blurb om din Python-version. Kontrollera bara att du kör Python 2.4 eller 2.5 (här är det 2.5.1): Din tur: Försök att söka efter andra ord för att spara omskrivning, du kanske kan använda upp - arrow, Ctrl-up-pil eller Alt-p för att komma åt det föregående kommandot och ändra ordet som söks. Du kan också försöka söka på några av de andra texterna som vi har inkluderat. Till exempel, sök Sense och Sensibility för word affection. använder text2.concordance (quotaffectionquot). Sök i Genesisboken för att ta reda på hur länge vissa personer levde, med hjälp av text3.concordance (quotlivedquot). Du kan titta på text4. Inaugural Address Corpus. att se exempel på engelska som går tillbaka till 1789 och söka efter ord som nation. skräck. gud för att se hur dessa ord har använts annorlunda över tiden. Weve ingår också text5. NPS Chat Corpus. sök här efter okonventionella ord som im. UR. LOL. (Observera att det här corpuset är uncensored) När du har spenderat lite tid på att undersöka dessa texter hoppas vi att du har en ny känsla av språkets rikedom och mångfald. I nästa kapitel lär du dig tillgång till ett bredare utbud av text, inklusive text på andra språk än engelska. En överensstämmelse tillåter oss att se ord i sammanhang. Vi såg till exempel att monstrous inträffade i sammanhang som bilderna och storleken. Vilka andra ord visas i ett liknande sammanhang Vi kan ta reda på genom att lägga till termen som liknar namnet på den aktuella texten och sedan infoga det relevanta ordet inom parentes: Observera att vi får olika resultat för olika texter. Austen använder detta ord ganska annorlunda än Melville för henne, monstrous har positiva konnotationer, och fungerar ibland som en förstärkare som ordet mycket. Uttrycket commoncontexts tillåter oss att undersöka bara de sammanhang som delas av två eller flera ord, såsom monstrous och mycket. Vi måste bifoga dessa ord med parenteser och separera dem med ett kommatecken: Din tur: Välj ett annat par ord och jämför deras användning i två olika texter med hjälp av liknande () och commoncontexts () - funktionerna. Det är en sak att automatiskt upptäcka att ett visst ord uppträder i en text och att visa några ord som visas i samma sammanhang. Vi kan emellertid också bestämma platsen för ett ord i texten: hur många ord från början visas det. Denna positionsinformation kan visas med hjälp av en dispersionsplot. Varje rand representerar en förekomst av ett ord, och varje rad representerar hela texten. I 1.2 ser vi några slående mönster av ordanvändning under de senaste 220 åren (i en artificiell text som konstruerats genom att ansluta sig till texten från Inaugural Address Corpus end-to-end). Du kan producera denna plot som visas nedan. Du kan gärna prova fler ord (t ex frihet) och olika texter. Kan du förutse spridningen av ett ord innan du ser det Som tidigare, var noga med att få citat, kommatecken, parenteser och parentes exakt rätt. Figur 1.2. Lexical Dispersion Plot för ord i USA: s presidentiella inledningsadresser: Detta kan användas för att undersöka förändringar i språkanvändning över tiden. Viktigt: Du måste ha Pythons NumPy och Matplotlib-paket installerade för att skapa de grafiska tomterna som används i den här boken. Vänligen se nltk. org för installationsanvisningar. Nu, bara för skojs skull, låt oss försöka generera lite slumpmässig text i de olika stilar vi just har sett. För att göra detta skriver vi namnet på texten följt av termen generera. (Vi måste inkludera parenteserna, men det finns inget som går mellan dem.) Observera att den första gången du kör detta kommando är det långsamt eftersom det samlar statistik om ordsekvenser. Varje gång du kör det, kommer du att få olika utgående text. Försök nu skapa slumpmässig text i stil med en inledningsadress eller ett Internet-chattrum. Även om texten är slumpmässig, använder den vanliga ord och fraser från källtexten och ger oss en känsla av stil och innehåll. (Vad saknas i denna slumpmässigt genererade texten) När generering producerar sin produktion delas skiljetecken från föregående ord. Även om detta inte är korrekt formatering för engelsk text, gör vi det för att klargöra att ord och skiljetecken är oberoende av varandra. Du kommer lära dig mer om detta i 3. Räkna ordförråd Det mest uppenbara faktumet om texter som framgår av de föregående exemplen är att de skiljer sig åt i ordförrådet de använder. I det här avsnittet ser vi hur du använder datorn för att räkna orden i en text på en mängd olika sätt. Som tidigare hoppar du direkt in och experimenterar med Python tolken, även om du kanske inte har studerat Python systematiskt ännu. Testa din förståelse genom att ändra exemplen och försök övningarna i slutet av kapitlet. Låt oss börja med att ta reda på längden på en text från början till slut, i form av ord och skiljetecken som visas. Vi använder termen len för att få längden på något, vilket väl gäller här i Genesisboken: Så Genesis har 44.764 ord och leksikonssymboler, eller quottokens. quot Ett token är det tekniska namnet för en sekvens av tecken 8212 som hårig . hans. eller :) 8212 som vi vill behandla som en grupp. När vi räknar antalet tokens i en text, säg uttrycket att vara eller inte vara. vi räknar händelser av dessa sekvenser. Således är det i vårt exempel fras två förekomster att. två av vara. och en var och en eller inte. Men det finns bara fyra olika ordförråd i denna fras. Hur många olika ord innehåller Genesisboken För att arbeta ut i Python måste vi ställa frågan något annorlunda. Ordförråd i en text är bara den uppsättning tokens som den använder, eftersom i en uppsättning alla dubbletter sammanfaller ihop. I Python kan vi få ordlistans artiklar av text3 med kommandot: set (text3). När du gör det, kommer många skärmar med ord att flyga förbi. Prova nu följande: Genom att pakka in sorterade () runt Python uttryckssatsen (text3). vi får en sorterad lista över ordförrådsposter, som börjar med olika interpunktionssymboler och fortsätter med ord som börjar med A. Alla aktiverade ord föregår små bokstäver. Vi upptäcker ordförrådets storlek indirekt, genom att fråga om antal artiklar i uppsättningen, och igen kan vi använda len för att få detta nummer. Även om den har 44.764 tokens, har den här boken endast 2.789 olika ord eller kvotetyper. quot En ordtyp är ordet eller stavningen av ordet oberoende av dess specifika händelser i en text 8212, det vill säga ordet betraktas som ett unikt föremål av ordförråd. Vårt antal av 2 789 objekt kommer att innehålla skiljetecken, så vi brukar kalla dessa unika objekttyper istället för ordtyper. Nu kan vi beräkna ett mått på textens lexiska rikedom. I nästa exempel visas att varje ord används 16 gånger i genomsnitt (vi måste se till att Python använder floating point division): Observera att våra index börjar från noll: skickat element noll, skrivet skickat0. är det första ordet, word1. medan skickat element 9 är word10. Orsaken är enkel: det ögonblick som Python får tillgång till innehållet i en lista från datorminnet, det är redan vid det första elementet måste vi berätta hur många element som går framåt. Således lämnar nollsteg framåt den vid det första elementet. Denna praxis att räkna från noll är initialt förvirrande men typiskt för moderna programmeringsspråk. Du kommer snabbt hänga på det om du har behärskat systemet för att räkna århundraden där 19XY är ett år på 1900-talet, eller om du bor i ett land där byggnadens våningar är numrerade från 1 och så går upp n-1 Trappsteg tar dig till nivå n. Om vi ​​av misstag använder ett index som är för stort får vi ett fel: Den här gången är det inte ett syntaxfel, eftersom programfragmentet är syntaktiskt korrekt. I stället är det ett runtime-fel. och det producerar ett Traceback-meddelande som visar felets sammanhang, följt av namnet på felet IndexError. och en kort förklaring. Låt oss titta närmare på skivning, med hjälp av vår artificiella mening igen. Här kontrollerar vi att skivan 5: 8 innehåller skickade element i index 5, 6 och 7: Vi kan ändra ett element i en lista genom att tilldela ett av dess indexvärden. I det följande exemplet sätter vi sent0 till vänster om jämliksignalen. Vi kan också ersätta en hel skiva med nytt material. En följd av den senaste ändringen är att listan endast har fyra element, och att få tillgång till ett senare värde genererar ett fel. Din tur: Ta några minuter för att definiera en mening och ändra enskilda ord och grupper av ord (skivor) med samma metoder som tidigare använts. Kontrollera din förståelse genom att försöka öva på listor i slutet av detta kapitel. Från början av 1.1. Du har haft tillgång till texter som heter text1. text2. och så vidare. Det räddade mycket att skriva för att kunna hänvisa till en 250 000 ordbok med ett kortnamn som detta. I allmänhet kan vi göra namnen på allt vi bryr oss att beräkna. Vi gjorde det här i de tidigare sektionerna, t. ex. definierar en variabel som skickas1. enligt följande: Sådana linjer har formen: variabelt uttryck. Python kommer att utvärdera uttrycket och spara resultatet till variabeln. Denna process kallas uppdrag. Det genererar ingen produktion du måste skriva variabeln på en rad för att inspektera dess innehåll. Liknande tecken är något vilseledande, eftersom information flyttas från höger sida till vänster. Det kan hjälpa till att tänka på det som en vänsterpil. Namnet på variabeln kan vara allt du vill, t. ex. mysent. mening . xyzzy. Det måste börja med ett brev, och det kan innehålla siffror och understreck. Här är några exempel på variabler och uppdrag: Kom ihåg att aktiverade ord visas före små bokstäver i sorterade listor. Observera i föregående exempel att vi delar upp definitionen av mysent över två linjer. Python uttryck kan delas över flera linjer, så länge som detta händer inom alla slags parenteser. Python använder citatet. quot prompt att ange att mer inmatning förväntas. Det spelar ingen roll hur mycket inryckning används i dessa fortsättningslinjer, men vissa indragningar gör det vanligtvis lättare att läsa. Det är bra att välja meningsfulla variabla namn för att påminna dig 8212 och för att hjälpa någon annan som läser din Python-kod 8212 vad din kod är tänkt att göra. Python försöker inte förnuftiga namnen, det följer blint dina anvisningar, och gör inget emot om du gör något förvirrande, till exempel en två eller två 3. Den enda begränsningen är att ett variabelt namn inte kan vara några av Pythons reserverade ord, till exempel def. om . inte och import. Om du använder ett reserverat ord kommer Python att skapa ett syntaxfel: Var försiktig med ditt val av namn (eller identifierare) för Python-variabler. Först bör du börja namnet med ett brev, valfritt följt av siffror (0 till 9) eller bokstäver. Således är abc23 bra, men 23abc kommer att orsaka ett syntaxfel. Namn är skiftlägeskänsliga, vilket betyder att myVar och myvar är olika variabler. Variable namn kan inte innehålla whitespace, men du kan skilja ord genom att använda ett understreck, t. ex. myvar. Var försiktig så att du inte sätter in en bindestreck istället för ett understreck: my-var är fel, eftersom Python tolkar citatet som ett minustecken. Några av de metoder som vi använde för att komma åt elementen i en lista fungerar också med enskilda ord eller strängar. Till exempel kan vi tilldela en sträng till en variabel. indexera en sträng. och skiva en sträng: Vi kan också utföra multiplikation och tillägg med strängar: Vi kan ansluta sig till orden i en lista för att skapa en enda sträng, eller dela en sträng i en lista enligt följande: Vi kommer tillbaka till ämnet strängar i 3. För närvarande har vi två viktiga byggstenar 8212 listor och strängar 8212 och är redo att komma tillbaka till någon språkanalys. 1.3 Beräkning med språk: Enkel statistik Låt oss återgå till vår undersökning av hur vi kan få våra beräkningsresurser att bära på stora mängder text. Vi började denna diskussion i 1.1. och såg hur man söker efter ord i sammanhang, hur man sammanställer ordförråd i en text, hur man skapar slumpmässig text i samma stil och så vidare. I det här avsnittet tar vi upp frågan om vad som skiljer en text och använder automatiska metoder för att hitta karaktäristiska ord och uttryck för en text. Som i 1.1. Du kan prova nya funktioner i Python-språket genom att kopiera dem till tolk, och du kommer att lära dig systematiskt om dessa funktioner i följande avsnitt. Innan du fortsätter kan du kanske kolla din förståelse av det sista avsnittet genom att förutsäga resultatet av följande kod. Du kan använda tolken för att kontrollera om du har det rätt. Om du inte är säker på hur du gör den här uppgiften, är det en bra idé att granska föregående avsnitt innan du fortsätter vidare. Frekvensfördelningar Hur kan vi automatiskt identifiera ord i en text som är mest informativ om ämnet och genren i texten Föreställ dig hur du kan gå för att hitta de 50 vanligaste orden i en bok. En metod skulle vara att hålla ett tal för varje ordförråd, som det som visas i 1.3. Tallyen skulle behöva tusentals rader, och det skulle vara en överdriven arbetskraftsprocess 8212 så jobbig att vi hellre skulle tilldela uppgiften till en maskin. Figur 1.3. Räkna ord som uppträder i en text (en frekvensfördelning) Tabellen i 1.3 är känd som en frekvensfördelning. och det berättar hur ofta varje ordförråd är i texten. (Generellt kan det räkna med någon form av observerbar händelse.) Det är en quotdistributionquot eftersom det berättar hur det totala antalet ordtoken i texten distribueras över ordförrådsposterna. Eftersom vi ofta behöver frekvensfördelningar i språkbehandling, erbjuder NLTK inbyggt stöd för dem. Låt oss använda en FreqDist för att hitta de 50 vanligaste orden i Moby Dick. Försök att ta reda på vad som händer här och läs sedan förklaringen som följer. När vi först påminner FreqDist. Vi skickar namnet på texten som ett argument. Vi kan inspektera det totala antalet ord (quotoutcomesquot) som har räknats upp 8212 260.819 i fallet Moby Dick. Expressionsnycklarna () ger oss en lista över alla de olika typerna i texten. och vi kan titta på de första 50 av dessa genom att skära listan. Din tur: Försök med föregående frekvensdistributionsexempel för dig själv, för text2. Var försiktig med att använda rätt parentes och stora bokstäver. Om du får ett felmeddelande NameError: namn FreqDist är inte definierat. du behöver starta ditt arbete med från nltk. book import Gör några ord som produceras i det sista exemplet hjälpa oss att förstå ämnet eller genren i den här texten. Endast ett ord, val. är lite informativ Det sker över 900 gånger. Resten av orden berättar ingenting om texten theyre bara engelska quotplumbing. quot Vilken andel av texten tas upp med sådana ord Vi kan generera en kumulativ frekvensplott för dessa ord, med fdist1.plot (50, cumulativeTrue). för att producera grafen i 1.4. Dessa 50 ord står för nästan hälften av boken Figur 1.4. Kumulativ frekvensplan för 50 vanligaste ord i Moby Dick. Dessa står för nästan hälften av symbolerna. Om de vanliga orden inte hjälper oss, hur är det med orden som bara uppträder en gång, de så kallade hapaxerna. Visa dem genom att skriva fdist1.hapaxes (). Denna lista innehåller lexicograf. cetological. smuggelgods. expostulations. och ca 9000 andra. Det verkar som om det finns för många sällsynta ord, och utan att vi ser kontextet kan vi antagligen inte anta vad hälften av hapaxerna betyder i alla fall Eftersom varken frekventa eller sällsynta ord hjälper, behöver vi prova något annat. Finkornigt val av ord Nästa kan vi titta på textens långa ord kanske dessa kommer att vara mer karakteristiska och informativa. För detta anpassar vi några noteringar från uppsättningsteorin. Vi skulle vilja hitta ord från ordförrådet i texten som är längre än 15 tecken. Låt oss kalla den här egenskapen P. så att P (w) är sann om och endast om w är mer än 15 tecken långt. Nu kan vi uttrycka ord av intresse med hjälp av matematisk uppsättning notation som visas i (1a). Detta betyder quotteset av alla w så att w är ett element i V (ordförrådet) och w har egenskap P kv. Härifrån ser vi att den vanligaste ordlängden är 3, och att orden med längd 3 står för ungefär 50 000 (eller 20) av orden som utgör boken. Även om vi inte kommer att driva det här, kan ytterligare analys av ordlängd hjälpa oss att förstå skillnader mellan författare, genrer eller språk. 1.2 sammanfattar de funktioner som definieras i frekvensfördelningar. Dessa uttryck har formen f (w) för. eller w. f () för. . där f är en funktion som fungerar på ett ord för att beräkna dess längd, eller att konvertera den till stor bokstav. För nu behöver du inte förstå skillnaden mellan noteringarna f (w) och w. f (). Istället lär du bara det här Python-idiomet som utför samma funktion på alla delar av en lista. I de föregående exemplen går det igenom varje ord i text1. Tilldela var och en åt gången till variabeln w och utföra den angivna operationen på variabeln. Den beskrivna notationen kallas en quotlist comprehension. quot Detta är vårt första exempel på ett Python-idiom, en fast notation som vi använder vanligtvis utan att störa analysen varje gång. Mastering av sådana idiom är en viktig del av att bli en flytande Python programmerare. Låt oss återgå till frågan om ordförrådsstorlek och tillämpa samma idiom här: Nu när vi inte är dubbelräknande ord som This and this. som endast skiljer sig åt i kapitalisering, torkade vi 2.000 av ordförrådstalet. Vi kan gå ett steg längre och eliminera siffror och skiljetecken från ordförrådstalet genom att filtrera bort några icke-alfabetiska objekt: Detta exempel är lite komplicerat: det sänker alla rena alfabetiska objekt . Kanske hade det varit enklare att bara räkna med små bokstäver, men det ger fel svar (varför). Oroa dig inte om du inte känner dig trygg med listförståelser än, eftersom du kommer att se många fler exempel tillsammans med förklaringar i följande kapitel. Nested Code Blocks De flesta programmeringsspråk tillåter oss att exekvera ett block av kod när ett villkorligt uttryck. eller om uttalandet är uppfyllt. Vi har redan sett exempel på villkorliga tester i kod som w för w i sent7 om len (w) lt 4. I följande program har vi skapat en variabel som heter ord som innehåller strängvärdet katten. If-satsen kontrollerar om testlänet (word) lt 5 är sant. Det är så att omkroppsberättelsens kropp åberopas och utskriftsdeklarationen exekveras och visar ett meddelande till användaren. Kom ihåg att skriva in utskriftsutrymmet genom att skriva in fyra mellanslag. Detta kallas en loop eftersom Python exekverar koden i cirkulär mode. Det börjar med att utföra uppdragsordet Samtal. effektivt använda ordvariabeln för att namnge det första objektet i listan. Sedan visar det värdet av ordet till användaren. Därefter går det tillbaka till förklaringen och utför uppdragsordet mig. innan detta nya värde visas för användaren, och så vidare. Det fortsätter på detta sätt tills alla objekt i listan har bearbetats. Looping med villkor Nu kan vi kombinera om och för uttalanden. Vi kommer att slinga över varje objekt i listan och skriva ut objektet endast om det slutar med bokstaven l. Väl välj ett annat namn för variabeln för att visa att Python inte försöker få mening om variabla namn. Du kommer att märka att om och för uttalanden har ett kolon i slutet av raden innan indryckningen börjar. Faktum är att alla Python-kontrollstrukturer slutar med ett kolon. Kolon indikerar att det aktuella uttalandet avser det inramade blocket som följer. Vi kan också ange en åtgärd som ska vidtas om villkoren för if-uttalandet inte är uppfyllt. Här ser vi elif (annars om) uttalandet och det andra uttalandet. Observera att dessa också har kolon innan den indragna koden. 1.5 Automatisk naturligt språkförståelse Vi har undersökt språkkunskaper med hjälp av texter och Python programmeringsspråk. Men var också intresserad av att utnyttja vår kunskap om språk och beräkning genom att bygga användbar språkteknologi. Tja, ta tillfället i akt att återgå från käften av kod för att måla en större bild av naturlig språkbehandling. På en rent praktisk nivå behöver vi alla hjälp för att navigera i universum av information som är låst i text på webben. Sökmotorer har varit avgörande för tillväxten och populariteten hos webben, men har vissa brister. Det krävs skicklighet, kunskap och lycka till att extrahera svar på sådana frågor som: Vilka turistplatser kan jag besöka mellan Philadelphia och Pittsburgh på en begränsad budget Vad säger experter om digitala SLR-kameror Vilka förutsägelser om stålmarknaden gjordes av trovärdiga kommentatorer under den senaste veckan Att få en dator att svara på dem involverar automatiskt en rad språkbehandlingsuppgifter, inklusive informationsutvinning, inferens och sammanfattning, och skulle behöva utföras på en skala och med en robusthet som fortfarande ligger utanför vår nuvarande kapacitet. På en mer filosofisk nivå har en långvarig utmaning inom artificiell intelligens varit att bygga intelligenta maskiner, och en stor del av det intelligenta beteendet är förståelse för språket. I många år har detta mål uppfattats som för svårt. Men eftersom NLP-tekniken blir mogen och robusta metoder för att analysera obegränsad text blir mer utbredd, har utsikterna till naturlig språkförståelse åter uppstått som ett trovärdigt mål. I det här avsnittet beskriver vi en del språkkunnande tekniker för att ge dig en känsla av de intressanta utmaningar som väntar på dig. Word Sense-disambiguering I ordsinne-skiljedom vill vi utreda vilken känsla av ett ord som var tänkt i ett visst sammanhang. Tänk på de tvetydiga orden servera och maträtt: servera. hjälp med mat eller dryck håll ett kontor placera bollen i spelrätten. Plattformen av en måltidskommunikationsanordning I en mening som innehöll frasen: han serverade skålen. du kan upptäcka att både servering och maträtt används med deras betydelse för maten. Det är osannolikt att diskussionsämnet flyttas från sport till porslin i tre ord. Detta skulle tvinga dig att uppfinna bisarra bilder, som en tennisproffs som tar ut sina frustrationer på en kinesisk te-uppsättning som läggs ut bredvid domstolen. Med andra ord automatiserar vi automatiskt ord med hjälp av sammanhang och utnyttjar det enkla faktumet att närstående ord har nära relaterade betydelser. Som ett annat exempel på denna kontextuella effekt, överväga ordet av. som har flera betydelser, t. ex. boken av Chesterton (agent 8212 Chesterton var bokens författare) bägaren vid kaminen (lokal 8212 kaminen är där bägaren är) och skickar in till fredag ​​(tidsmässigt 8212 fredag ​​är inlämningstiden). Observera i (3c) att meningen med det kursiverade ordet hjälper oss att tolka betydelsen av. De förlorade barnen hittades av sökarna (agentiska) De förlorade barnen hittades av berget (lokativa) De förlorade barnen hittades på eftermiddagen (temporal) Pronoun Resolution En djupare typ av språkförståelse är att utarbeta quote som gjorde vad som tillhör 8212 dvs att upptäcka ämnen och objekt av verb. Du lärde dig att göra detta i grundskolan, men det är svårare än du kanske tror. I satsen stal tjuvarna målningarna det är lätt att berätta för vem som utförde stjälningen. Tänk på tre möjliga följande meningar i (4c). och försök att bestämma vad som såldes, fångats och hittades (ett fall är tvetydigt). Tjuvarna stal målningarna. De såldes därefter. Tjuvarna stal målningarna. De fångades därefter. Tjuvarna stal målningarna. De hittades sedan. Att svara på den här frågan innebär att man finner pronomen som föregångare. antingen tjuvar eller målningar. Beräkningstekniker för att ta itu med detta problem inkluderar anaphorupplösning 8212 som identifierar vad en pronomen eller substantivfras hänvisar till 8212 och semantisk rollmärkning 8212 identifierar hur en substantivfras relaterar till verbet (som agent, patient, instrument, och så vidare). Generera språkutmatning Om vi ​​automatiskt kan lösa sådana problem med språkförståelse, kommer vi att kunna gå vidare till uppgifter som involverar att generera språkutmatning, som frågeformulär och maskinöversättning. I det första fallet bör en maskin kunna svara på användarnas frågor om insamling av texter: För att avgöra om hypotesen stöds av texten behöver systemet följande bakgrundskunskaper: (i) om någon är en författare av en bok, då har heshe skrivit den boken (ii) om någon är redaktör för en bok, så har heshe inte skrivit (hela) den boken (iii) om någon är redaktör eller författare till arton böcker, kan man inte dra slutsatsen den heshe är författare till arton böcker. Begränsningar av NLP Trots de forskningsinriktade framstegen i uppgifter som RTE, kan naturliga språksystem som har implementerats för verkliga applikationer fortfarande inte utföra sunt förnuftskoncept eller dra på sig kunskaper på ett globalt och robust sätt. Vi kan vänta på att dessa svåra problem med artificiell intelligens löses, men under tiden är det nödvändigt att leva med vissa allvarliga begränsningar av naturliga språksystems resonemang och kunskapsförmåga. Följaktligen har ett viktigt mål med NLP-forskning precis varit från början att göra framsteg på den svåra uppgiften att bygga teknik som kvitterar språk, citerar ytliga men kraftfulla tekniker i stället för obegränsad kunskap och resonemang. Detta är verkligen ett av målen i den här boken, och vi hoppas att utrusta dig med kunskap och färdigheter för att bygga användbara NLP-system och bidra till den långsiktiga ambitionen att bygga intelligenta maskiner. 1.6 Sammanfattningstexter är representerade i Python med hjälp av listor: Monty. Python. Vi kan använda indexering, skivning och funktionen len () på listor. Ett ord quottokenquot är ett särskilt utseende av ett givet ord i en text ett ord quottypequot är den unika formen av ordet som en viss bokstavsordning. Vi räknar ordet tokens med hjälp av len (text) och ordtyper med len (set (text)). Vi får ordförråd av en text t med hjälp av sorterade (set (t)). Vi arbetar på varje objekt i en text med f (x) för x i text. För att härleda vokabuläret, kollapsande fallskillnader och ignorering av skiljetecken kan vi skriva set (w. lower () för w i text om w. isalpha ()). Vi bearbetar varje ord i en text med hjälp av ett för uttalande, till exempel för w i t: eller för ord i text:. Detta måste följas av kolontecknet och ett inmatat block av kod som ska utföras varje gång genom slingan. 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) . t. ex. 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 . och så vidare. 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. There is an outstanding list of bugs that are unlikely to be fixed. The plan is for the core functionality of this module to be implemented in pandas. If you wish to see this module live on independently of pandas, feel free to fork the code and take it over. The scikits. timeseries module provides classes and functions for manipulating, reporting, and plotting time series of various frequencies. The focus is on convenient data access and manipulation while leveraging the existing mathematical functionality in numpy and 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

Comments

Popular Posts