Я только начинаю использовать NLTK и не совсем понимаю, как получить список слов из текста. Если я использую nltk.word_tokenize()
, я получаю список слов и знаков препинания. Вместо этого мне нужны только слова. Как избавиться от знаков препинания? Также word_tokenize
не работает с несколькими предложениями: к последнему слову добавляются точки.
125
nltk.word_tokenize(the_text.translate(None, string.punctuation))
должен работать в python2, а в python3 вы можетеnltk.work_tokenize(the_text.translate(dict.fromkeys(string.punctuation)))
.word_tokenize()
не работает с несколькими предложениями. Чтобы избавиться от знаков препинания, вы можете использовать регулярное выражение илиisalnum()
функцию Python .>>> 'with dot.'.translate(None, string.punctuation) 'with dot'
(обратите внимание на отсутствие точки в конце результата). Это может вызвать проблемы, если у вас есть такие вещи, как'end of sentence.No space'
, в этом случае, сделайте это вместо:the_text.translate(string.maketrans(string.punctuation, ' '*len(string.punctuation)))
который заменяет все знаки препинания пробелами.Ответы:
Взгляните на другие варианты токенизации, которые предоставляет здесь nltk . Например, вы можете определить токенизатор, который выбирает последовательности буквенно-цифровых символов в качестве токенов и отбрасывает все остальное:
Вывод:
источник
word_tokenize
как разделение сокращений. Вы можете наивно разделить на регулярное выражение\w+
без необходимости в NLTK.Для удаления знаков препинания вам действительно не нужен NLTK. Вы можете удалить его простым питоном. Для струнных:
Или для юникода:
а затем используйте эту строку в своем токенизаторе.
В строковом модуле PS есть другие наборы элементов, которые можно удалить (например, цифры).
источник
a = "*fa,fd.1lk#$" print("".join([w for w in a if w not in string.punctuation]))
Приведенный ниже код удалит все знаки препинания, а также неалфавитные символы. Скопировано из их книги.
http://www.nltk.org/book/ch01.html
вывод
источник
Как отмечалось в комментариях, начинаются с sent_tokenize (), потому что word_tokenize () работает только с одним предложением. Вы можете отфильтровать знаки препинания с помощью filter (). И если у вас есть строки Unicode, убедитесь, что это объект unicode (а не 'str', закодированный с некоторой кодировкой, например 'utf-8').
источник
word_tokenize
это функция, которая возвращает[token for sent in sent_tokenize(text, language) for token in _treebank_word_tokenize(sent)]
. Итак, я думаю, что ваш ответ делает то, что уже делает nltk: использованиеsent_tokenize()
перед использованиемword_tokenize()
. По крайней мере, это для nltk3.did
и ,n't
но не.
Я просто использовал следующий код, который удалил все знаки препинания:
источник
Я думаю, вам нужно какое-то сопоставление регулярных выражений (следующий код находится в Python 3):
Вывод:
Должен работать хорошо в большинстве случаев, так как он удаляет знаки препинания при сохранении токенов, таких как "n't", которые не могут быть получены из токенизаторов регулярных выражений, таких как
wordpunct_tokenize
.источник
...
и--
при сохранении схваток, чегоs.translate(None, string.punctuation)
не будет,Искренне спрашиваю, что такое слово? Если ваше предположение состоит в том, что слово состоит только из буквенных символов, вы ошибаетесь, поскольку такие слова, как,
can't
будут уничтожены на части (например,can
иt
), если вы удалите пунктуацию до токенизации. , что, скорее всего, отрицательно повлияет на вашу программу.Следовательно, решение состоит в том, чтобы разметить, а затем удалить знаки препинания .
... а затем , если вы хотите, вы можете заменить некоторые маркеры , такие как
'm
сam
.источник
Я использую этот код для удаления знаков препинания:
И если вы хотите проверить, является ли токен допустимым английским словом или нет, вам может понадобиться PyEnchant.
Руководство:
источник
word_tokenize
используется стандартный токенизатор,TreebankWordTokenizer
который разделяет сокращения (например,can't
на (ca
,n't
). Однакоn't
не является буквенно-цифровым и теряется в процессе.Удалить пунктуацию (удалит., А также часть обработки пунктуации, используя приведенный ниже код)
Пример ввода / вывода:
['direct', 'flat', 'oberoi', 'esquire', '3', 'bhk', '2195', 'saleable', '1330', 'carpet', 'rate', '14500', 'final', 'plus', '1', 'floor', 'rise', 'tax', 'approx', '9', 'flat', 'cost', 'parking', '389', 'cr', 'plus', 'taxes', 'plus', 'possession', 'charger', 'middle', 'floor', 'north', 'door', 'arey', 'oberoi', 'woods', 'facing', '53', 'paymemt', 'due', '1', 'transfer', 'charge', 'buyer', 'total', 'cost', 'around', '420', 'cr', 'approx', 'plus', 'possession', 'charges', 'rahul', 'soni']
источник
Просто добавив к решению с помощью @rmalouf, это не будет включать никаких чисел, потому что \ w + эквивалентно [a-zA-Z0-9_]
источник
Вы можете сделать это одной строкой без nltk (python 3.x).
источник