Есть ли способ сказать #textblob не разделить схватки как let's
в let
& 's
при создании ngrams? Я знаю, что они являются технически двумя отдельными словами, но я хотел бы сохранить их как один.Консервантов схваток с textblob ngrams
ответ
Похоже, у вас есть два варианта здесь:
- Измените tokenizer used in TextBlob.
- После обработки жетонов.
Последний легче, но медленнее.
Изменение паттерна
TextBlob принимает NLTK tokenizers, и я больше знаком с теми, поэтому мы будем использовать. WordPunctTokenizer NLTK является RepexpTokenizer с рисунком "\\w+|[^\\w\\s]+"
:
>>> nltk.tokenize.RegexpTokenizer("\\w+|[^\\w\\s]+").tokenize("Let's check this out.")
['Let', "'", 's', 'check', 'this', 'out', '.']
Перед дизъюнкции является \w+
, что указывает на буквы. После дизъюнкции [^\w\s]
, который соответствует любому, что не является символом или пробелом, то есть пунктуацией.
Если вы хотите включить '
в словах, чтобы получить "let's"
, то вы можете просто добавить этот символ в слово символьной части дизъюнкции:
>>> nltk.tokenize.RegexpTokenizer("[\\w']+|[^\\w\\s]+").tokenize("Let's check this out.")
["Let's", 'check', 'this', 'out', '.']
Постобработка
The Однако подход regex не идеален. Я подозреваю, что встроенный токенизатор TextBlob может быть немного лучше, чем мы могли бы взломать вместе с регулярным выражением. Если вы строго хотите взять сокращения в качестве одного токена, я рекомендую только пост-обработку TextBlob.
>>> tokens = ["Let", "'s", "check", "this", "out", "."]
>>> def postproc(toks):
... toks_out = []
... while len(toks) > 1:
... bigram = toks[:2]
... if bigram[1][0] == "'":
... toks_out.append("".join(bigram))
... toks = toks[2:]
... else:
... toks_out.append(bigram[0])
... toks = toks[1:]
... toks_out.extend(toks)
... return toks_out
...
>>> postproc(tokens)
["Let's", 'check', 'this', 'out', '.']
Таким образом, вы получите исправление точно, что хотите фиксировать, но вся последующая обработка добавляет время выполнения к вашему коду.
- 1. Консервантов отрицательных значений после фильтрации
- 2. TextClassification с TextBlob
- 3. Использование Sentiwordnet с TextBlob
- 4. Сформировать ngrams с Юлией
- 5. Граф количество схваток, разделенных нулями
- 6. Python 3.5.2: from textblob import TextBlob: TypeError
- 7. Перевести столбец pandas с TextBlob
- 8. Консервантов псевдонимов над OSX SSH Rsync
- 9. Поиск ngrams в R и сравнение ngrams через тела
- 10. Как получить массив всех ngrams в Perl Text :: Ngrams
- 11. python.cannot import name 'TextBlob'
- 12. TextBlob Наивная байесовская классификация
- 13. UnicodeDecodeError в учебнике textblob
- 14. счетной частота ngrams
- 15. Как включить Solr ngrams
- 16. Настройка прокси для textblob
- 17. Запуск TextBlob в Python3
- 18. Count nGrams frequency
- 19. nGrams in apache mahout
- 20. Invalid Синтаксис: импорт TextBlob в питон 2.6.6
- 21. Установка TextBlob с Conda на Windows
- 22. UnicodeDecodeError с использованием TextBlob и Python 2.7
- 23. Не удается получить и работает с TextBlob
- 24. обучить языковой модели с помощью Google Ngrams
- 25. Как использовать совпадения ngrams с Solr
- 26. Чтение google ngrams с помощью google_ngram_downloader
- 27. Многословные векторы вектора с Word nGrams?
- 28. python textblob и текстовая классификация
- 29. Python textblob Translation API Ошибка
- 30. ngrams модули elasticsearch не работают
только что осуществил это - используя nltk tokenizers & ngrams. работал отлично - и теперь я могу отказаться от текстового блока из моего проекта! – nealrs
Приятно слышать, и удачи! – Dan
К сожалению, это не работает, где '' 'не является первым символом, например' doesn't' будет токенироваться в '[" does "," not "], но' postproc() 'doesn ' t обрабатывать этот случай. –