Sunday 17 December 2017

Simple moving average python no Brasil


Este é um wrapper Python para TA-LIB baseado em Cython em vez de SWIG. A partir da homepage: TA-Lib é amplamente utilizado pelos desenvolvedores de software de negociação que exigem a realização de análise técnica de dados do mercado financeiro. Inclui 150 indicadores como ADX, MACD, RSI, estocástico, Bollinger Bands, etc. Reconhecimento de padrão de candlestick API de código aberto para CC, Java, Perl, Python e 100 gerenciados As ligações Python originais usam SWIG que infelizmente são difíceis de instalar e não Tão eficientes quanto poderiam ser. Portanto, este projeto usa Cython e Numpy para se ligar de forma eficiente e limpa a TA-Lib - produzindo resultados 2-4 vezes mais rápido do que a interface SWIG. Instalar o TA-Lib ou Ler os Docs Similar à TA-Lib, a interface de função fornece um invólucro leve dos indicadores TA-Lib expostos. Cada função retorna uma matriz de saída e tem valores padrão para seus parâmetros, a menos que especificado como argumentos de palavra-chave. Normalmente, essas funções terão um período inicial de retorno (um número necessário de observações antes que uma saída seja gerada) definida para NaN. Todos os exemplos a seguir usam a função API: Calcula uma média móvel simples dos preços de fechamento: Cálculo de bandas de bollinger, com média móvel exponencial tripla: Momento de cálculo dos preços de fechamento, com um período de tempo de 5: Já familiarizado com o uso da função API, você deve se sentir em casa usando a API abstrata. Cada função tem a mesma entrada, passada como um dicionário de arrays Numpy: As funções podem ser importadas diretamente ou instanciadas por nome: A partir daí, chamar funções é basicamente o mesmo que a função API: Saiba mais sobre o uso mais avançado de TA-Lib aqui . Indicadores Suportados Podemos mostrar todas as funções TA suportadas pelo TA-Lib, seja como uma lista ou como um dict classificado por grupo (por exemplo, Estudos de Sobreposição, Indicadores Momentum, etc): Grupos de Funções1 Processamento de Linguagem e Python É fácil obter nossas mãos Em milhões de palavras de texto. O que podemos fazer com ele, assumindo que podemos escrever alguns programas simples Neste capítulo, bem endereço as seguintes perguntas: O que podemos conseguir, combinando técnicas de programação simples com grandes quantidades de texto Como podemos extrair automaticamente palavras-chave e frases que resumem a Estilo e conteúdo de um texto Quais ferramentas e técnicas a linguagem de programação Python fornece para tal trabalho Quais são alguns dos desafios interessantes do processamento de linguagem natural Este capítulo é dividido em seções que saltam entre dois estilos bastante diferentes. No quotcomputing com seções do languagequot nós tomaremos em algumas tarefas linguistically motivated da programação sem explicando necessariamente como trabalham. No próximo olhar sobre as seções de Pythonquot, iremos sistematicamente revisar os principais conceitos de programação. Bem, sinalize os dois estilos nos títulos das seções, mas os capítulos posteriores misturarão ambos os estilos sem ser tão up-front sobre ele. Esperamos que este estilo de introdução lhe dê um sabor autêntico do que virá mais tarde, ao mesmo tempo que abrange uma gama de conceitos elementares em linguística e ciência da computação. Se você tem familiaridade básica com ambas as áreas, você pode pular para 1,5, vamos repetir quaisquer pontos importantes em capítulos posteriores, e se você perder alguma coisa, você pode facilmente consultar o material de referência on-line em nltk. org. Se o material for completamente novo para você, este capítulo levantará mais perguntas do que respostas, questões que são abordadas no restante deste livro. 1.1 Computação com a linguagem: Textos e palavras Todos estavam familiarizados com o texto, pois lemos e escrevemos todos os dias. Aqui vamos tratar o texto como dados brutos para os programas que escrevemos, programas que o manipulam e analisam de várias maneiras interessantes. Mas antes que possamos fazer isso, temos que começar com o interpretador Python. Começando com Python Uma das coisas amigáveis ​​sobre Python é que ele permite que você digite diretamente no interpretador interativo 8212 o programa que estará executando seus programas Python. Você pode acessar o interpretador Python usando uma interface gráfica simples chamada Interactive DeveLopment Environment (IDLE). Em um Mac você pode encontrar isso em Aplicações 8594 MacPython. E no Windows em Todos os Programas 8594 Python. No Unix, você pode executar o Python a partir do shell, digitando ocioso (se isso não estiver instalado, tente digitar python). O intérprete irá imprimir um blurb sobre a sua versão Python simplesmente verifique se você está executando o Python 2.4 ou 2.5 (aqui é 2.5.1): Your Turn: Tente pesquisar por outras palavras para salvar re-tipagem, você pode ser capaz de usar até - arrow, Ctrl-up-arrow ou Alt-p para acessar o comando anterior e modificar a palavra que está sendo pesquisada. Você também pode tentar pesquisas em alguns dos outros textos que incluímos. Por exemplo, procure Sentido e Sensibilidade para a palavra afeto. Usando text2.concordance (quotaffectionquot). Procure no livro de Gênesis para descobrir quanto tempo algumas pessoas viveram, usando text3.concordance (quotlivedquot). Você poderia olhar para o texto4. O Corpo de Endereço Inaugural. Para ver exemplos de inglês que remonta a 1789, e procurar por palavras como nação. terror. Deus para ver como essas palavras têm sido usadas de forma diferente ao longo do tempo. Weve incluiu também o texto5. O NPS Chat Corpus. Procure por palavras não convencionais como im. Ur. ri muito. (Observe que este corpus é sem censura) Uma vez que você passou um pouco de tempo examinando esses textos, esperamos que você tenha um novo sentido da riqueza e diversidade da linguagem. No próximo capítulo, você aprenderá como acessar uma ampla gama de texto, incluindo texto em idiomas diferentes do inglês. Uma concordância nos permite ver as palavras no contexto. Por exemplo, vimos que monstruoso ocorreu em contextos como as imagens eo tamanho. O que outras palavras aparecem em uma gama similar de contextos Podemos descobrir anexando o termo semelhante ao nome do texto em questão, inserindo a palavra relevante entre parênteses: Observe que obtemos resultados diferentes para textos diferentes. Austen usa esta palavra muito diferente de Melville para ela, monstruosa tem conotações positivas, e às vezes funciona como um intensificador como a palavra muito. O termo commoncontexts nos permite examinar apenas os contextos que são compartilhados por duas ou mais palavras, como monstruoso e muito. Temos de colocar estas palavras entre colchetes, bem como parênteses, e separá-los com uma vírgula: Your Turn: Escolha outro par de palavras e compare seu uso em dois textos diferentes, usando as funções similar () e commoncontexts (). Uma coisa é detectar automaticamente que uma determinada palavra ocorre em um texto e exibir algumas palavras que aparecem no mesmo contexto. No entanto, também podemos determinar a localização de uma palavra no texto: quantas palavras desde o início aparece. Esta informação posicional pode ser exibida usando um gráfico de dispersão. Cada faixa representa uma instância de uma palavra, e cada linha representa o texto inteiro. Em 1.2, vemos alguns padrões marcantes de uso da palavra nos últimos 220 anos (em um texto artificial construído por unir os textos do Corpo de Endereço Inaugural de ponta a ponta). Você pode produzir esse gráfico como mostrado abaixo. Você pode querer tentar mais palavras (por exemplo, liberdade de constituição), e diferentes textos. Você pode prever a dispersão de uma palavra antes de vê-la Como antes, tome cuidado para obter aspas, vírgulas, parênteses e parênteses exatamente à direita. Figura 1.2. Lote de Dispersão Lexical para Palavras em Endereços Inaugurais Presidenciais dos EUA: Isto pode ser usado para investigar mudanças no uso de linguagem ao longo do tempo. Importante: Você precisa ter pacotes Pythons NumPy e Matplotlib instalados para produzir as parcelas gráficas usadas neste manual. Consulte nltk. org para obter instruções de instalação. Agora, apenas por diversão, vamos tentar gerar algum texto aleatório nos vários estilos que acabamos de ver. Para fazer isso, digite o nome do texto seguido pelo termo generate. (Precisamos incluir os parênteses, mas não há nada que vá entre eles.) Observe que a primeira vez que você executar este comando, é lento porque ele reúne estatísticas sobre seqüências de palavras. Cada vez que você executá-lo, você obterá texto de saída diferente. Agora tente gerar texto aleatório no estilo de um endereço inaugural ou uma sala de bate-papo na Internet. Embora o texto seja aleatório, ele reutiliza palavras e frases comuns do texto de origem e nos dá um senso de seu estilo e conteúdo. (O que falta neste texto gerado aleatoriamente) Quando gerar produz sua saída, a pontuação é separada da palavra precedente. Embora esta formatação não seja correta para o texto em inglês, fazemos isso para deixar claro que as palavras e a pontuação são independentes umas das outras. Você aprenderá mais sobre isso em 3. Contando Vocabulário O fato mais óbvio sobre os textos que emerge dos exemplos precedentes é que eles diferem no vocabulário que eles usam. Nesta seção, veremos como usar o computador para contar as palavras em um texto em uma variedade de maneiras úteis. Como antes, você vai saltar para a direita e experimentar com o intérprete Python, mesmo que você não pode ter estudado Python sistematicamente ainda. Teste sua compreensão modificando os exemplos e testando os exercícios no final do capítulo. Vamos começar por descobrir o comprimento de um texto do início ao fim, em termos de palavras e símbolos de pontuação que aparecem. Usamos o termo len para obter o comprimento de algo, o que bem se aplica aqui ao livro de Gênesis: Então Gênesis tem 44.764 palavras e símbolos de pontuação, ou quottokens. quot Um token é o nome técnico para uma seqüência de caracteres 8212, como peludo . dele . Ou: 8212 que queremos tratar como um grupo. Quando contamos o número de tokens em um texto, digamos, a frase a ser ou não ser. Estamos contando ocorrências dessas seqüências. Assim, em nossa frase de exemplo há duas ocorrências de para. Dois de ser. E um cada de ou e não. Mas há apenas quatro itens de vocabulário distintos nesta frase. Quantas palavras distintas o livro do Gênesis contém Para trabalhar isso em Python, temos que colocar a questão de forma ligeiramente diferente. O vocabulário de um texto é apenas o conjunto de tokens que ele usa, já que em um conjunto, todas as duplicatas são recolhidas juntas. Em Python podemos obter os itens de vocabulário de text3 com o comando: set (text3). Quando você fizer isso, muitas telas de palavras vão voar passado. Agora tente o seguinte: Envolvendo ordenado () em torno do conjunto de expressão Python (text3). Obtemos uma lista ordenada de itens de vocabulário, começando com vários símbolos de pontuação e continuando com as palavras começando com A. Todas as palavras em maiúsculas precedem palavras em minúsculas. Descobrimos o tamanho do vocabulário indiretamente, pedindo o número de itens no conjunto, e novamente podemos usar len para obter esse número. Embora tenha 44.764 tokens, este livro tem apenas 2.789 palavras distintas, ou quotword types. quot Um tipo de palavra é a forma ou ortografia da palavra independentemente de suas ocorrências específicas em um texto 8212 ou seja, a palavra considerada como um item exclusivo de vocabulário. Nossa contagem de 2.789 itens incluirá símbolos de pontuação, então geralmente chamaremos esses tipos de itens exclusivos em vez de tipos de palavras. Agora, vamos calcular uma medida da riqueza lexical do texto. O próximo exemplo mostra que cada palavra é usada 16 vezes em média (precisamos ter certeza que Python usa divisão em ponto flutuante): Note que nossos índices começam de zero: elemento enviado zero, escrito enviado0. É a primeira palavra, palavra1. Enquanto o elemento enviado 9 é a palavra 10. A razão é simples: no momento em que o Python acessa o conteúdo de uma lista a partir da memória dos computadores, já está no primeiro elemento que precisamos dizer quantos elementos irão avançar. Assim, zero passos para a frente deixa-lo no primeiro elemento. Esta prática de contar a partir de zero é inicialmente confusa, mas típica das linguagens de programação modernas. Youll rapidamente obter o jeito dele se você dominou o sistema de contar séculos onde 19XY é um ano no século 20, ou se você mora em um país onde os andares de um edifício são numerados a partir de 1, e assim andando n-1 Vôos de escadas leva você ao nível n. Agora, se acidentalmente usar um índice que é muito grande, obtemos um erro: Desta vez não é um erro de sintaxe, porque o fragmento do programa é sintaticamente correto. Em vez disso, é um erro de tempo de execução. E ele produz uma mensagem Traceback que mostra o contexto do erro, seguido pelo nome do erro, IndexError. E uma breve explicação. Vamos dar uma olhada no corte, usando nossa sentença artificial novamente. Aqui verificamos que a fatia 5: 8 inclui elementos enviados nos índices 5, 6 e 7: Nós podemos modificar um elemento de uma lista atribuindo a um de seus valores de índice. No próximo exemplo, colocamos send0 à esquerda do sinal de igual. Também podemos substituir uma fatia inteira por um novo material. Uma consequência desta última alteração é que a lista só tem quatro elementos, e aceder a um valor posterior gera um erro. Sua vez: Tome alguns minutos para definir uma frase de seu próprio e modificar palavras individuais e grupos de palavras (fatias) usando os mesmos métodos usados ​​anteriormente. Verifique a sua compreensão, tentando os exercícios em listas no final deste capítulo. Desde o início de 1.1. Você teve acesso a textos chamados text1. Text2. e assim por diante. Ele salvou um monte de digitação para ser capaz de se referir a um livro de 250.000 palavras com um nome curto como este Em geral, podemos fazer nomes para qualquer coisa que cuidado para calcular. Fizemos isso nós mesmos nas seções anteriores, p. Definindo uma variável sent1. Como segue: Tais linhas têm a forma: expressão variável. O Python irá avaliar a expressão e salvar seu resultado para a variável. Esse processo é chamado de atribuição. Ele não gera qualquer saída que você tem que digitar a variável em uma linha própria para inspecionar o seu conteúdo. O sinal de igualdade é um pouco enganador, uma vez que a informação está se movendo do lado direito para a esquerda. Poderia ajudar a pensar nisso como uma flecha para a esquerda. O nome da variável pode ser qualquer coisa que você gosta, p. Meu frase . Xyzzy Ele deve começar com uma letra, e pode incluir números e sublinhados. Aqui estão alguns exemplos de variáveis ​​e atribuições: Lembre-se que as palavras em maiúsculas aparecem antes de palavras em minúsculas em listas classificadas. Observe no exemplo anterior que dividimos a definição de mysent sobre duas linhas. As expressões Python podem ser divididas em várias linhas, desde que isso ocorra em qualquer tipo de parênteses. O Python usa o quot. Quot prompt para indicar que mais entrada é esperada. Não importa o quanto o recuo é usado nessas linhas de continuação, mas algum recuo geralmente facilita a leitura. É bom escolher nomes de variáveis ​​significativas para lembrá-lo 8212 e para ajudar qualquer outra pessoa que lê seu código Python 8212 o que seu código deve fazer. Python não tenta fazer sentido dos nomes que cegamente segue suas instruções, e não se opõe se você fizer algo confuso, como um dois ou três 3. A única restrição é que um nome de variável não pode ser qualquer uma das palavras reservadas Pythons, como def. E se . não . E importação. Se você usar uma palavra reservada, o Python produzirá um erro de sintaxe: Tenha cuidado com sua escolha de nomes (ou identificadores) para variáveis ​​Python. Primeiro, você deve iniciar o nome com uma letra, opcionalmente seguido de dígitos (0 a 9) ou letras. Assim, abc23 é bom, mas 23abc irá causar um erro de sintaxe. Os nomes são sensíveis a maiúsculas e minúsculas, o que significa que myVar e myvar são variáveis ​​distintas. Os nomes de variáveis ​​não podem conter espaços em branco, mas você pode separar palavras usando um sublinhado, p. Myvar Tenha cuidado para não inserir um hífen em vez de um sublinhado: my-var está errado, uma vez que Python interpreta o quot - quot como um sinal de menos. Alguns dos métodos que usamos para acessar os elementos de uma lista também funcionam com palavras individuais ou seqüências de caracteres. Por exemplo, podemos atribuir uma string a uma variável. Indexar uma string. E fatia uma corda: Podemos também executar a multiplicação ea adição com cordas: Podemos unir as palavras de uma lista para fazer uma única seqüência, ou dividir uma seqüência de caracteres em uma lista, da seguinte forma: Voltaremos ao tópico de seqüências de caracteres em 3. Por enquanto, temos dois blocos de construção importantes 8212 listas e strings 8212 e estamos prontos para voltar a alguma análise de linguagem. 1.3 Computação com linguagem: estatísticas simples Permite voltar à nossa exploração das maneiras pelas quais podemos levar nossos recursos computacionais para suportar grandes quantidades de texto. Começamos esta discussão em 1.1. E viu como procurar palavras no contexto, como compilar o vocabulário de um texto, como gerar texto aleatório no mesmo estilo, e assim por diante. Nesta seção, levantamos a questão do que torna um texto distinto e usamos métodos automáticos para encontrar palavras e expressões características de um texto. Como em 1.1. Você pode experimentar novos recursos da linguagem Python, copiando-os para o interpretador, e você aprenderá sobre esses recursos sistematicamente na próxima seção. Antes de prosseguir, você pode verificar sua compreensão da última seção, prevendo a saída do código a seguir. Você pode usar o intérprete para verificar se você tem direito. Se você não tem certeza de como fazer essa tarefa, seria uma boa idéia para rever a seção anterior antes de continuar mais. Distribuições de frequência Como podemos identificar automaticamente as palavras de um texto que são mais informativas sobre o tema eo gênero do texto Imagine como você pode ir sobre encontrar as 50 palavras mais freqüentes de um livro. Um método seria manter um registro para cada item de vocabulário, como mostrado em 1.3. A contagem precisaria de milhares de linhas, e seria um processo extremamente trabalhoso tão trabalhoso que preferiria atribuir a tarefa a uma máquina. Figura 1.3. Contando palavras aparecendo em um texto (uma distribuição de freqüência) A tabela em 1.3 é conhecida como uma distribuição de freqüência. E ele nos diz a freqüência de cada item de vocabulário no texto. (Em geral, ele poderia contar qualquer tipo de evento observável.) É uma quotdistribuição porque ele nos diz como o número total de tokens de palavras no texto são distribuídos entre os itens de vocabulário. Como muitas vezes precisamos de distribuições de freqüência no processamento da linguagem, o NLTK fornece suporte integrado para eles. Vamos usar um FreqDist para encontrar as 50 palavras mais freqüentes de Moby Dick. Tente descobrir o que está acontecendo aqui, então leia a explicação a seguir. Quando invocamos pela primeira vez FreqDist. Passamos o nome do texto como um argumento. Podemos inspecionar o número total de palavras (quotoutcomesquot) que foram contados até 8212 260,819 no caso de Moby Dick. A expressão keys () nos dá uma lista de todos os tipos distintos no texto. E podemos olhar para os primeiros 50 destes por fatiar a lista. Sua vez: Experimente o exemplo de distribuição de freqüência precedente para você mesmo, para text2. Tenha cuidado para usar os parênteses corretos e letras maiúsculas. Se você receber uma mensagem de erro NameError: nome FreqDist não está definido. Você precisa começar o seu trabalho com a partir de nltk. book importação Faça qualquer palavra produzida no último exemplo nos ajudar a compreender o tema ou gênero deste texto Apenas uma palavra, baleia. É ligeiramente informativo Ocorre sobre 900 vezes. O restante das palavras não nos diz nada sobre o texto que são apenas inglês quotplumbing. quot Que proporção do texto é retomado com tais palavras Podemos gerar um gráfico de freqüência cumulativa para essas palavras, usando fdist1.plot (50, cumulativeTrue). Para produzir o gráfico em 1.4. Estas 50 palavras respondem por quase metade do livro. Lote de freqüência cumulativa para 50 palavras mais freqüentes em Moby Dick. Estes representam quase metade dos tokens. Se as palavras freqüentes não nos ajudam, como sobre as palavras que ocorrem somente uma vez, os assim chamados hapaxes. Veja-os digitando fdist1.hapaxes (). Esta lista contém lexicógrafo. Cetológica. contrabando. Exposições. E cerca de 9.000 outros. Parece que há muitas palavras raras, e sem ver o contexto provavelmente não podemos adivinhar o que metade dos hapaxes significam em qualquer caso. Uma vez que nem as palavras freqüentes nem raras ajudam, precisamos tentar outra coisa. Seleção de grãos finos de palavras Em seguida, vamos olhar para as palavras longas de um texto talvez estes serão mais característicos e informativos. Para isso, adaptamos alguma notação da teoria dos conjuntos. Gostaríamos de encontrar as palavras do vocabulário do texto com mais de 15 caracteres. Vamos chamar essa propriedade P. para que P (w) seja verdadeira se e somente se w for maior que 15 caracteres. Agora podemos expressar as palavras de interesse usando notação de conjuntos matemáticos como mostrado em (1a). Isso significa que o conjunto de todos w tal que w é um elemento de V (o vocabulário) e w tem propriedade P quot. A partir disso, vemos que o comprimento da palavra mais freqüente é 3, e que as palavras de comprimento 3 representam cerca de 50.000 (ou 20) das palavras que compõem o livro. Embora não o tenhamos perseguido aqui, uma análise mais aprofundada do comprimento das palavras pode nos ajudar a entender as diferenças entre autores, gêneros ou idiomas. 1.2 resume as funções definidas nas distribuições de frequências. Essas expressões têm a forma f (w) para. Ou w. f () para. . Onde f é uma função que opera sobre uma palavra para calcular seu comprimento, ou convertê-la em maiúscula. Por enquanto, você não precisa entender a diferença entre as notações f (w) e w. f (). Em vez disso, basta aprender esse idioma Python que executa a mesma operação em cada elemento de uma lista. Nos exemplos anteriores, ele passa por cada palavra no texto1. Atribuindo cada uma delas, por sua vez, à variável w e executando a operação especificada na variável. A notação que acabamos de descrever é chamada de compreensão quotlist. Este é o nosso primeiro exemplo de um idioma Python, uma notação fixa que usamos habitualmente sem se preocupar em analisar cada vez. Dominar tais expressões idiomáticas é uma parte importante de se tornar um programador fluente de Python. Vamos voltar à questão do tamanho do vocabulário e aplicar o mesmo idioma aqui: Agora que não estamos contando duas palavras como This e this. Podemos ir um passo adiante e eliminar números e pontuação da contagem de vocabulário, filtrando quaisquer itens não alfabéticos: Este exemplo é um pouco complicado: ele faz a minúscula de todos os itens puramente alfabéticos . Talvez ele teria sido mais simples apenas para contar os itens apenas em minúsculas, mas isso dá a resposta errada (por que). Não se preocupe se você não se sentir confiante com compreensões de lista ainda, desde youll ver muitos mais exemplos, juntamente com explicações nos próximos capítulos. Blocos de código aninhados A maioria das linguagens de programação nos permite executar um bloco de código quando uma expressão condicional. Ou se declaração, está satisfeito. Já vimos exemplos de testes condicionais em código como w para w em sent7 se len (w) lt 4. No programa a seguir, criamos uma variável chamada palavra contendo o valor de string cat. A instrução if verifica se o teste len (palavra) lt 5 é verdadeiro. É, portanto, o corpo da instrução if é invocado ea instrução de impressão é executada, exibindo uma mensagem para o usuário. Lembre-se de recuar a instrução de impressão digitando quatro espaços. Isso é chamado de loop porque o Python executa o código de forma circular. Ele inicia-se executando a palavra de atribuição Call. Efetivamente usando a variável palavra para nomear o primeiro item da lista. Em seguida, ele exibe o valor da palavra para o usuário. Em seguida, ele volta para a instrução for e executa a palavra de atribuição me. Antes de exibir esse novo valor para o usuário, e assim por diante. Continua assim até que todos os itens da lista tenham sido processados. Looping with Conditions Agora podemos combinar as instruções if e for. Vamos fazer um loop sobre cada item da lista, e imprimir o item apenas se ele termina com a letra l. Bem, escolha outro nome para a variável para demonstrar que o Python não tenta fazer sentido de nomes de variáveis. Você notará que se e para instruções têm um dois-pontos no final da linha, antes do recuo começa. De fato, todas as estruturas de controle do Python terminam com dois pontos. O cólon indica que a declaração atual se refere ao bloco recuado que se segue. Também podemos especificar uma ação a ser tomada se a condição da instrução if não for atendida. Aqui vemos a instrução elif (else if) ea instrução else. Repare que estes também têm dois pontos antes do código recuado. 1.5 Entendimento Automático da Linguagem Natural Nós temos explorado a linguagem de baixo para cima, com a ajuda de textos e da linguagem de programação Python. No entanto, também estavam interessados ​​em explorar o nosso conhecimento de linguagem e computação através da construção de tecnologias de linguagem útil. Bem aproveitar a oportunidade agora para recuar a partir do nitty-gritty de código, a fim de pintar um quadro maior de processamento de linguagem natural. Em um nível puramente prático, todos nós precisamos de ajuda para navegar o universo de informações trancadas em texto na Web. Os motores de busca foram cruciais para o crescimento ea popularidade da Web, mas têm algumas deficiências. É preciso habilidade, conhecimento e um pouco de sorte, para extrair respostas para perguntas como: Quais sites turísticos posso visitar entre Filadélfia e Pittsburgh com um orçamento limitado O que os especialistas dizem sobre câmeras SLR digitais Que previsões sobre o mercado de aço foram feitas por credíveis Comentadores na semana passada Obtendo um computador para respondê-los automaticamente envolve uma série de tarefas de processamento de linguagem, incluindo extração de informações, inferência e resumo, e precisaria ser realizada em uma escala e com um nível de robustez que ainda está além do nosso Capacidades atuais. Em um nível mais filosófico, um desafio de longa data dentro da inteligência artificial tem sido construir máquinas inteligentes, e uma parte importante do comportamento inteligente é entender a linguagem. Por muitos anos este objetivo foi visto como muito difícil. No entanto, à medida que as tecnologias de PNL se tornam mais maduras, e métodos robustos para analisar o texto irrestrito se tornam mais difundidos, a perspectiva do entendimento da linguagem natural ressurgiu como uma meta plausível. Nesta seção descrevemos algumas tecnologias de compreensão da linguagem, para dar-lhe um senso dos desafios interessantes que estão esperando por você. Desambiguação de Sentido de Palavra Na desambiguação de sentido de palavra, queremos descobrir qual o sentido de uma palavra que se pretendeu num determinado contexto. Considere as palavras ambíguas servir e prato: servir. Ajuda com comida ou bebida segure um escritório colocar bola em prato de jogo. Prato curso de uma refeição dispositivo de comunicação Em uma frase contendo a frase: ele serviu o prato. Você pode detectar que ambos servem e prato estão sendo usados ​​com seus significados de comida. É improvável que o tema da discussão tenha mudado do esporte para a louça no espaço de três palavras. Isso iria forçá-lo a inventar imagens bizarras, como um profissional de tênis tirando as suas frustrações em um chá-conjunto de porcelana dispostos ao lado do tribunal. Em outras palavras, automaticamente desambiguamos as palavras usando o contexto, explorando o simples fato de que as palavras próximas têm significados estreitamente relacionados. Como outro exemplo desse efeito contextual, considere a palavra por. Que tem vários significados, e. O livro de Chesterton (agendado 8212 Chesterton era o autor do livro) o copo pelo fogão (local 8212 o fogão é onde o copo é) e apresentar por sexta-feira (tempo 8212 sexta-feira é o momento da submissão). Observe em (3c) que o significado da palavra em itálico nos ajuda a interpretar o significado de por. As crianças perdidas foram encontradas pelos pesquisadores (agentive) As crianças perdidas foram encontradas pela montanha (locative) As crianças perdidas foram encontradas pela tarde (temporal) Pronoun Resolution Um tipo mais profundo de compreensão da linguagem é descobrir quotwho fez o quê quemquot 8212 ie para detectar os sujeitos e objetos dos verbos. Você aprendeu a fazer isso na escola primária, mas é mais difícil do que você imagina. Na sentença os ladrões roubaram as pinturas é fácil dizer quem executou a ação de roubo. Considere três possíveis sentenças seguintes em (4c). E tentar determinar o que foi vendido, capturado e encontrado (um caso é ambíguo). Os ladrões roubaram as pinturas. Foram posteriormente vendidos. Os ladrões roubaram as pinturas. Foram capturados subseqüentemente. Os ladrões roubaram as pinturas. Foram encontrados subseqüentemente. Responder a esta questão envolve encontrar o antecedente do pronome eles. Ladrões ou pinturas. As técnicas computacionais para lidar com esse problema incluem a resolução 8212 da anáfora, identificando o que um pronome ou frase nominal se refere a 8212 e a rotulagem do papel semântico 8212 identificando como uma frase nominal se relaciona com o verbo (como agente, paciente, instrumento etc.). Gerando Saída de Linguagem Se pudermos resolver automaticamente tais problemas de compreensão da linguagem, seremos capazes de passar para tarefas que envolvem a geração de saída de linguagem, como resposta a perguntas e tradução automática. No primeiro caso, uma máquina deve ser capaz de responder a uma pergunta dos usuários relacionada à coleta de textos: Para determinar se a hipótese é suportada pelo texto, o sistema precisa do seguinte conhecimento de fundo: (i) se alguém é um autor De um livro, então ele escreveu aquele livro (ii) se alguém é um editor de um livro, então ele não escreveu (todo) esse livro (iii) se alguém é editor ou autor de dezoito livros, então não se pode concluir Que ele é autor de dezoito livros. Limitações da PNL Apesar dos avanços liderados por pesquisas em tarefas como a RTE, os sistemas de linguagem natural que foram implantados para aplicações do mundo real ainda não conseguem executar o raciocínio de senso comum ou extrair conhecimento do mundo de uma maneira geral e robusta. Podemos esperar que esses difíceis problemas de inteligência artificial sejam resolvidos, mas, entretanto, é necessário viver com algumas limitações severas na capacidade de raciocínio e conhecimento dos sistemas de linguagem natural. Assim, desde o início, um importante objetivo da pesquisa PNL foi progredir na difícil tarefa de construir tecnologias que entendam a linguagem, usando técnicas superficiais e poderosas, em vez de conhecimento irrestrito e capacidade de raciocínio. Na verdade, este é um dos objetivos deste livro, e esperamos equipá-lo com os conhecimentos e habilidades para construir sistemas de PNL úteis e para contribuir para a aspiração de construir máquinas inteligentes a longo prazo. 1.6 Sumário Os textos são representados em Python usando listas: Monty. Python. Podemos usar a indexação, o corte ea função len () nas listas. Uma palavra quottokenquot é uma aparência particular de uma determinada palavra em um texto uma palavra quottypequot é a forma única da palavra como uma seqüência particular de letras. Contamos tokens de palavras usando len (texto) e tipos de palavras usando len (set (text)). Obtemos o vocabulário de um texto t usando ordenado (conjunto (t)). Operamos em cada item de um texto usando f (x) para x no texto. Para derivar o vocabulário, colapsando distinções de caso e ignorando a pontuação, podemos escrever set (w. lower () para w no texto se w. isalpha ()). Processamos cada palavra em um texto usando uma instrução for, como para w em t: ou para palavra em texto:. Isso deve ser seguido pelo caractere de dois pontos e um bloco de código recuado, a ser executado a cada vez através do loop. Testamos uma condição usando uma instrução if: if len (word) lt 5:. Isso deve ser seguido pelo caractere de dois pontos e um bloco de código recuado, a ser executado somente se a condição for verdadeira. Uma distribuição de frequência é uma colecção de itens juntamente com as suas contagens de frequência (por exemplo, as palavras de um texto e a sua frequência de aparência). Uma função é um bloco de código ao qual foi atribuído um nome e pode ser reutilizado. As funções são definidas usando a palavra-chave def, como em def mult (x, y) xey são parâmetros da função e atuam como espaços reservados para valores de dados reais. Uma função é chamada especificando seu nome seguido por um ou mais argumentos dentro de parênteses, como este: mult (3, 4). por exemplo. Len (text1). 1.7 Leitura Adicional Este capítulo introduziu novos conceitos em programação, processamento de linguagem natural e linguística, todos misturados em conjunto. Muitos deles são consolidados nos capítulos seguintes. No entanto, você também pode querer consultar os materiais on-line fornecidos com este capítulo (em nltk. org), incluindo links para materiais de fundo adicionais e links para sistemas de PNL on-line. Você também pode gostar de ler alguns conceitos relacionados à linguística e à PNL na Wikipédia (por exemplo, colocações, o Teste de Turing, a distinção de tipo-token). Você deve se familiarizar com a documentação do Python disponível em docs. python. org. Incluindo os muitos tutoriais e materiais de referência abrangentes ali ligados. Um Guia para Iniciantes do Python está disponível em wiki. python. orgmoinBeginnersGuide. Questões diversas sobre o Python podem ser respondidas no FAQ em python. orgdocfaqgeneral. À medida que se aprofunda no NLTK, poderá querer subscrever a lista de correio onde são anunciadas novas versões do toolkit. 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 . Imprensa da Universidade de Oxford. (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 . e assim por diante. 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. Há uma excelente lista de bugs que provavelmente não serão corrigidos. O plano é que a funcionalidade principal deste módulo seja implementada em pandas. Se você deseja ver este módulo ao vivo independentemente de pandas, sinta-se livre para bifurcar o código e assumi-lo. O módulo scikits. timeseries fornece classes e funções para manipular, reportar e plotar séries temporais de várias freqüências. O foco está no acesso e manipulação de dados convenientes, ao mesmo tempo em que alavanca a funcionalidade matemática existente em numpy e scipy. Se os seguintes cenários lhe parecerem familiares, então você provavelmente encontrará o módulo scikits. timeseries útil: Compare muitas séries temporais com diferentes faixas de dados (por exemplo, preços de ações) Crie gráficos de eixos com espaçamento inteligente A mensal, tomando o valor médio durante cada mês Trabalho com dados que têm valores em falta Determine o último dia útil do mês anterior quarterteryear para fins de relato Calcular um desvio padrão móvel de forma eficiente Estes são apenas alguns dos cenários que são feitas muito simples com o scikits Módulo. timeseries. Documentation

No comments:

Post a Comment