Сумка слов Python

Muhammad Sulaman Toor спросил: 28 марта 2018 в 03:01 в: python

[PYTHON 3.x] Привет всем, я работаю над проектом в обработке на естественном языке и нуждаюсь в некоторой помощи. Я создал словарь (список) разных слов из всех документов. Я хочу создать вектор каждого документа по этому списку словарей (Doc_POS_words содержит 100 документов в этой форме Doc_POS_words [0] = 1-й документ, Doc_POS_words [1] = 2-й документ и т. Д.)

Выход:

# Doc_POS_words = [contains all the words of each document as below]Doc_POS_words = [
  ['war','life','travel','live','night'], 
  ['books','stuent','travel','study','yellow'],
  ]# myVoc = [distinct words from all the documents as below]myVoc = [
  'war',
  'life', 
  'travel',
  'live',
  'night',
  'books',
  'student',
  'study',
  'yellow'
]# myVoc_vector = [ need this as well ]# Doc_POS_words_BoW = [need this for each document]

PS: Я не использую NLTK, потому что я не работаю ни на одном из поддерживаемых языков с помощью NLTK

Спасибо.

2 ответа

kundan ответил: 28 марта 2018 в 03:11

Отметьте TfidfVectorizer

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["Doc 1 words",
          "Doc 2 words"]
vectorizer = TfidfVectorizer(min_df=1)
vectors = vectorizer.fit_transform(corpus)
Muhammad Sulaman Toor ответил: 28 марта 2018 в 03:30
Спасибо за ответ. Я уже пробовал TfidfVectorizer, но он не работает с моими данными и продолжает показывать следующее сообщение: ОШИБКА: возврат lambda x: strip_accents (x.lower ()) AttributeError: у объекта 'list' нет атрибута 'lower' PS: у меня есть слова, похожие на слова на арабском языке.
gahooa ответил: 28 марта 2018 в 03:40

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

https://docs.python.org/3/tutorial/datastructures.html#sets

Вот несколько примеров для вас , используя данные в вашем вопросе:

# create a set of the whole word list
myVocSet = set(myVoc)for doc_words in Doc_POS_words:
  # convert from list to set
  doc_words = set(doc_words)    # want to find words in the doc also in the vocabulary list?
  print(myVocSet.intersection(doc_words))  # want to find words in your doc not in the vocabulary list?
  print(doc_words.difference(myVocSet))  # want to find words in the vocab list not used in your doc?
  print(MyVocSet.difference(myVocSet))

Вот еще кое-что, чтобы помочь:

>>> x = set(('a', 'b', 'c', 'd'))
>>> y = set(('c', 'd', 'e', 'f'))
>>>
>>> x.difference(y)
{'a', 'b'}
>>> y.difference(x)
{'f', 'e'}
>>> x.intersection(y)
{'c', 'd'}
>>> y.intersection(x)
{'c', 'd'}
>>> x.union(y)
{'a', 'b', 'd', 'f', 'e', 'c'}
>>> x.symmetric_difference(y)
{'a', 'b', 'f', 'e'}