Я пытаюсь загрузить данные из набора данных Гутенберга 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.