Bioinformatyk.eu nowy serwis o bioinformatyce i programowaniu

01 sie, 2010

Słowniki frekwencyjne cz.2

Zamieszczony przez: Justi w: Python

Jakiś czas temu poruszałam temat słowników frekwencyjnych, które mogą się Tobie przydać do nauki języka obcego.  Jako że obiecałam wrócić do tego tematu, poniżej znajdziesz krótki program w Pythonie. Realizuje on, jak się pewnie domyślasz, funkcję wypisywania najczęściej występujących słów w danym tekście.

Aby było ciekawiej, program wyszukuje tekst w plikach pdf, czyli w najpopularniejszym formacie stosowanym przy publikacjach naukowych. Dzięki temu szybko zorientujesz się, jakie słownictwo przyda się najbardziej przy czytaniu danego tekstu i które braki warto uzupełnić. Myślę, że program, po niewielkich modyfikacjach znalazłby wiele innych zastosowań, swoje propozycje możesz wpisać w komentarzu.

Już na początku spotkałam się z problemem braku jakiejkolwiek biblioteki do Pythona jeśli chodzi o odczyt z plików pdf.  Niestety nie ma aktualnie żadnej opensource’owej biblioteki, jedyna dostępna – ReportLab, w wersji bezpłatnej może jedynie generować pdf-y, bez możliwości czytania ich zawartości.

Znalazłam inne rozwiązanie: pakiet xpdf

Zainstaluj pakiet xpdf (Ubuntu) wpisując w konsoli
sudo apt-get install xpdf
Dla pozostałych systemów jest również dostępny: http://www.foolabs.com/xpdf/download.html – pod precompiled binaries, z tym że zastrzegam, iż nie testowałam programu pod innym systemem poza Ubuntu.

Zakładam, że Pythona (ver. 2.6 +) już masz ;)

Sercem skryptu jest słownik, którego kluczem jest znalezione słowo a wartością – jego liczba wystąpień w tekście.
Użycie xpdf-a nasŧepuje w linii 18, który tworzy plik txt, który następnie trzeba przetworzyć.
TopWords = 1000 definiuje liczbę słów, które chcesz zobaczyć w top.
Jak wywołać ten skrypt? jako parametr musisz podać ścieżkę katalogu, w którym masz swoje pliki pdf. Jako, że wyszukiwanie jest rekurencyjne, przetworzone zostaną również pliki w podkatalogach.

Przykładowe wywołanie:
python freq.py /home/justi/Pulpit/pdf
Rezultat działania znajdziesz w pliku result.txt w tym samym katalogu, z którego uruchomiono skrypt. Miłej zabawy :)

import subprocess
import sys
import re
import os

try:
    p1 = subprocess.Popen(
    ['find', sys.argv[1], '-type', 'f', '-name', '*.pdf'],
    stdout=subprocess.PIPE)

    output_str = p1.communicate()[0]
    output_str = output_str.split('\n')
    output_str.pop() #pozbywamy się zbędnego ostatniego wiersza
    dict = {}

    for file in output_str:
    try:
        p = subprocess.Popen(
        ['pdftotext', '-q', file, "temp.txt"],
        stdout = subprocess.PIPE).wait() #czekamy na koniec procesu

        f = open("temp.txt", 'r')

        words = re.split('\W+', f.read().lower())

        for w in words:
            if (len(w) > 3):
                if dict.has_key(w):
                    dict[w] += 1
                else:
                    dict[w] = 1
        f.close()

    except IOError as (errno, strerror):
        print "I/O error({0}): {1}".format(errno, strerror)

    os.remove(os.path.join(os.getcwd(), "temp.txt"))

    f = open("result.txt", 'w')

    TopWords = 1000
    for index, w in enumerate(sorted(dict, key=dict.get, reverse=True)):
        if index < TopWords:
            f.write(w + "  " + str(dict[w]) + "\n")
    f.close()

except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)

Ściągnij plik:

  freq.py (1,4 KiB, 1 065 hits)

Autorem artykułu jest Justi

Brak odpowiedzi na "Słowniki frekwencyjne cz.2"

Formularz komentarza

Bioinformatyk.eu na Facebook'u

Ciekawa literatura

Reklama

Linki

O serwisie


Dynamiczny serwis tworzony przez studentów, dla studentów, który chcą dowiedzieć się czym jest i zajmuje się bioinformatyka. Naszym głównym celem jest zaopatrzenie Ciebie w niezbędną wiedzę, potrzebną do wypłynięcia w rozwijający się świat bioinformatyczny!