Exemple #1
0
def load_spell_checker():
    """Return spell checker"""
    if not os.path.exists("data/unigrams.txt"):
        sents = [normalize_text(" ".join(x)).split() for x in floresta.sents()]
        sents += [normalize_text(" ".join(x)).split() for x in machado.sents()]
        sents += [
            normalize_text(" ".join(x)).split() for x in mac_morpho.sents()
        ]

        unigrams = [item for sublist in sents for item in sublist]
        unigrams = nltk.probability.FreqDist(unigrams)

        file = open("data/unigrams.txt", "w")
        for k, v in unigrams.items():
            file.write(f"{k} {v}\n")
        file.close()

        bigrams = []

        for sent in sents:
            bigrams += list(nltk.bigrams(sent))

        bigrams = nltk.probability.FreqDist(bigrams)

        file = open("data/bigrams.txt", "w")
        for k, v in bigrams.items():
            file.write(f"{' '.join(k)} {v}\n")
        file.close()

    result = SymSpell()

    result.load_dictionary("data/unigrams.txt", 0, 1)
    result.load_bigram_dictionary("data/bigrams.txt", 0, 2)

    return result
Exemple #2
0
def concordance(word, context=30):
    for sent in mac_morpho.sents():
        if word in sent:
            pos = sent.index(word)
            left = ' '.join(sent[:pos])
            right = ' '.join(sent[pos + 1:])
            print('%*s %s %-*s' %\
                    (context, left[-context:], word, context, right[:context]))
def get_test_data(num_brown=200, num_mac=20):
    test_list = []
    file_list = []
    for file in brown.fileids()[:num_brown]:
        test_list.append(list(brown.sents(file)))
        file_list.append(file)
    for file in mac_morpho.fileids()[:num_mac]:
        test_list.append(list(mac_morpho.sents(file)))
        file_list.append(file)
    zip_shuffler = list(zip(test_list, file_list))
    random.shuffle(zip_shuffler)
    test_list, file_list = zip(*zip_shuffler)
    return test_list, file_list
Exemple #4
0

def pos_features(sentence, i):
    features = {
        "suffix(1)": sentence[i][-1:],
        "suffix(2)": sentence[i][-2:],
        "suffix(3)": sentence[i][-3:]
    }
    if i == 0:
        features["prev-word"] = "<START>"
    else:
        features["prev-word"] = sentence[i - 1]
    return features


pos_features(mac_morpho.sents(), 8)
tagged_sents = mac_morpho.tagged_sents()
featuresets = []
for tagged_sent in tagged_sents:
    untagged_sent = nltk.tag.untag(tagged_sent)
    for i, (word, tag) in enumerate(tagged_sent):
        featuresets.append((pos_features(untagged_sent, i), tag))
size = int(len(featuresets) * 0.1)
train_set, test_set = featuresets[size:], featuresets[:size]
classifier = nltk.NaiveBayesClassifier.train(train_set)

print('pos')
print(pos_features(doc, 8))

print('mac classify')
#print(nltk.classify.accuracy(classifier, test_set))
Exemple #5
0
import nltk
import nltk.tag
import itertools
from nltk.corpus import mac_morpho

mac_tagged_sents = mac_morpho.tagged_sents()
mac_sents = mac_morpho.sents()

size = int(len(mac_tagged_sents) * 0.9)

train_sents = mac_tagged_sents[:size]
test_sents = mac_tagged_sents[size:]

unigram_tagger = nltk.UnigramTagger(train_sents)
print(unigram_tagger.evaluate(test_sents))

#unigram_tagger = nltk.UnigramTagger(mac_tagged_sents)
#print(unigram_tagger.tag(mac_sents[2007]))

#print(unigram_tagger.evaluate(mac_tagged_sents))

#tags = [tag for (word, tag) in mac_morpho.tagged_words()]
#print(nltk.FreqDist(tags).max())
Exemple #6
0

*   **Ambiguidade**: uma mesma palavra pode ter papéis diferentes de acordo com o contexto (e.g., "Ele deu um parecer" - "O verbo parecer")
*   **Palavras fora do vocabulário**: quando nosso corpus não contém alguma palavra, fica difícil para o POS-Tagger "adivinhar" o valor morfológico da palavra. Isso é especialmente comum quando utilizar um POS-Tagger treinado em um domínio em textos de algum domínio específico, por exemplo, utilizar um POS-Tagger treinado em textos jornalísticos para marcação de um texto de prontuários de pacientes.

#### Corpus anotado MacMorpho
É um corpus de notícias em português, com mais de um milhão de palavras de textos jornalísticos da Folha de São Paulo. Todo o corpus foi taggeado/etiquetado com os valores morfológicos para cada palavra
"""

from nltk.corpus import mac_morpho
#nltk.download('mac_morpho')
# Palavras no corpus
mac_morpho.words()

# Sentenças
mac_morpho.sents()

# A palavras e suas tags
mac_morpho.tagged_words()

mac_morpho.tagged_sents()

# Vamos contar a quantidade de tokens
len(mac_morpho.words())

# Palavras únicas
len(nltk.FreqDist(mac_morpho.words()))

# Palavra mais frequente
nltk.FreqDist(mac_morpho.words()).max()
"""#### Treinando o POS-Tagging do NLTK
Exemple #7
0
    # - remover stopwords
    # - remover numerais
    # - stemming
    return [remove_diacritics(term).lower() for term in terms]


def remove_diacritics(text, encoding='utf8'):
    """Remove diacritics from bytestring or unicode, returning an unicode string"""
    nfkd_form = unicodedata.normalize('NFKD', to_unicode(text, encoding))
    only_ascii = nfkd_form.encode('ASCII', 'ignore')
    return only_ascii.decode(encoding)


def to_unicode(text, encoding='utf8'):
    """Convert a string (bytestring in `encoding` or unicode), to unicode."""
    if isinstance(text, six.text_type):
        return text
    return text.decode(encoding)


# nltk.download('mac_morpho')
# `news` é uma list que contém listas de tokens
news = [normalize_terms(sentence) for sentence in mac_morpho.sents()]
print(repr(news[0]))

# Estou utilizando os 1000 primeiros pra exemplificar. Processar todos os 51397 demora um tempinho
bm25 = BM25(news[:1000])
query = normalize_terms(nltk.word_tokenize('inflacao'))
for position, index in enumerate(bm25.ranked(query, 5)):
    print('{} - {}'.format(position, ' '.join(news[index])))