Слово NLTK токенизирует все слова, кроме слов с da sh, например ('hi-there', 'me-you') - PullRequest
3 голосов
/ 16 июня 2020

Я не уверен, как я могу использовать метод nltk.word_tokenize, если я хочу токенизировать все, кроме слов с da sh (т.е. исключает все слова, между которыми есть da sh). пример:

'hi-there', 'me-you'

Я попытался использовать RegexpTokenizer и написать регулярное выражение, но я каким-то образом заставил его не работать как метод word_tokenize и исключить '-'.

Ввод: 'привет, я Я искусственный человек '

Результат, который я ищу:

['hello','I','am','an','artificial-human']

Ответы [ 3 ]

1 голос
/ 17 июня 2020

Ответ, который дает вам Джей, правильно разделит слова, которые связаны da sh, но вам придется впоследствии использовать биграмму слов, чтобы узнать об этой комбинации слов.

Например, если вы впоследствии выполняете TF-IDF, вы можете сгенерировать его следующим образом:

TfidfVectorizer(ngram_range = (1,2)) 

Это сгенерирует векторизатор с учетом униграмм и биграмм слов.

Вы также можете заменить da sh пустым и просто объединить два слова в одно, чтобы впоследствии токенизировать слова как одно целое, а слово da sh было разделено как целые слова.

text = text.replace('-', '')
text = nltk.tokenize.word_tokenize(text)

Вывод:

['hello','I','am','an','artificialhuman']
1 голос
/ 17 июня 2020

Вот два способа, которые я предлагаю. Первый - использование функции split (). Да, это не идеальный выбор для токенизации, но он прост и, кажется, делает то, что вы хотите получить.

print('hello I am an artificial-human'.split())

Если вы все еще хотите использовать NLTK, вы можете использовать Whitespacetokenizer

t='hello I am an artificial-human'
import nltk
from nltk.tokenize import WhitespaceTokenizer
x=WhitespaceTokenizer().tokenize(t)
print(x)

Вывод обоих случаев:

enter image description here

Я не эксперт в NLTK, так как id не знаю, как этот токенизатор хорошо себя ведет в других ситуациях. Я видел этот пример из этой статьи , посмотрите если есть сомнения

0 голосов
/ 16 июня 2020

Вы можете заменить все экземпляры «-» на пробел перед обработкой текста:

text = text.replace("-", " ")
text = nltk.tokenize.word_tokenize(text)

Конечно, это означает, что любые экземпляры, в которых вы хотите сохранить «-», не принимается во внимание (однако я не уверен, есть ли какие-либо токенизаторы с таким поведением, я не могу придумать ни одного сценария ios, где вы хотели бы сохранить обман).

Если вы ' Если вы хотите переключить библиотеки, spacy - это вариант, который делает то, что вы хотите:

import spacy
nlp = spacy.load("en_core_web_sm")

for token in nlp("hello-world, nice to meet you!"):
    print(token)
hello
-
world
,
nice
to
meet
you
!
...