NLTK: Слово не в словаре, а в предложении - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь загрузить данные из набора данных Гутенберга NLTK.Я загружаю словарь из набора данных, исключая любые знаки препинания, и использую его для создания словаря преобразования слов в целые числа.Однако, когда я позже анализирую предложения и пытаюсь применить сопоставление, я получаю ключевую ошибку, потому что он пытается найти '"*' в словаре.

from nltk.corpus import gutenberg
import string

def strip_punctuation(sentence):
        return [word.lower() for word in sentence if word not in string.punctuation]

def build_mapping(vocab):
    word_to_int = {}
    for i, word in enumerate(vocab):
        word_to_int[word] = i
    return word_to_int

vocab = set()
for fileid in gutenberg.fileids():
    words = [w.lower() for w in gutenberg.words(fileid) if w not in string.punctuation]
    vocab = vocab.union(words)

word_to_int = build_mapping(vocab)

for fileid in gutenberg.fileids():
    for sentence in gutenberg.sents(fileid):
        sentence = strip_punctuation(sentence)
        for word in sentence:
            x = word_to_int[word] #KeyError: '"*'

Я понимаю, почему эта комбинация символов не являетсяпойман, когда я убираю знаки препинания, но так как я использую один и тот же метод удаления знаков препинания как для слов, так и для предложений, я смущен тем, что он появится в предложениях, но не в словаре.В данный момент я проверяю наличие символа в своем словаре перед тем, как применить сопоставление, но мне интересно, есть ли лучший способ убрать пунктуацию, чтобы я мог избежать операторов if.

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете сделать что-то вроде

Для Python 3

sentence = "I can't deal ';with it!**"
characters_to_get_rid_of = ".,':;*!?" #define all characters you don't want
sentence = sentence.translate(str.maketrans("","",characters_to_get_rid_of))
print(sentence)

Для Python 2

sentence = "I can't deal ';with it!**"
characters_to_get_rid_of = ".,':;*!?" #define all characters you don't want
sentence = sentence.translate(None,characters_to_get_rid_of)
print sentence

Результат

'i cant deal with it'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...