Хобрук: Ваш путь к мастерству в программировании

Как разбить список фраз на слова, чтобы использовать счетчик для них?

Мои данные - это темы разговоров с веб-форума. Я создал функцию для очистки данных от стоп-слов, знаков препинания и тому подобного. Затем я создал цикл для очистки всех сообщений, которые были в моем CSV-файле, и поместил их в список. Потом я сделал подсчет слов. Моя проблема в том, что список содержит фразы Unicode, а не отдельные слова. Как я могу разделить фразы, чтобы они были отдельными словами, которые я мог сосчитать. Вот мой код ниже:

 def post_to_words(raw_post):
      HTML_text = BeautifulSoup(raw_post).get_text()
      letters_only = re.sub("[^a-zA-Z]", " ", HTML_text)
      words = letters_only.lower().split()
      stops = set(stopwords.words("english"))   
      meaningful_words = [w for w in words if not w in stops]
      return( " ".join(meaningful_words))

clean_Post_Text = post_to_words(fiance_forum["Post_Text"][0])
clean_Post_Text_split = clean_Post_Text.lower().split()
num_Post_Text = fiance_forum["Post_Text"].size
clean_posts_list = [] 

for i in range(0, num_Post_Text):
    clean_posts_list.append( post_to_words( fiance_forum["Post_Text"][i]))

from collections import Counter
     counts = Counter(clean_posts_list)
     print(counts)

Мой вывод выглядит следующим образом: u'пожалуйста, следуйте инструкциям, обратите внимание на перемещение получателя':1 Я хочу, чтобы это выглядело так:

пожалуйста: 1

следовать: 1

инструкции: 1

и так далее.... Большое спасибо!


  • @ Coder256, код Джины показывает один экземпляр строки Unicode вместо подсчета одного экземпляра каждого слова в строке. 24.05.2016
  • Почему вы используете str.join, если вам нужен отдельный список слов? 25.05.2016

Ответы:


1

У вас уже есть список слов, поэтому вам не нужно ничего разбивать, забудьте о вызове str.join, т.е. " ".join(meaningful_words), и просто создайте словарь Counter и обновляйте его при каждом вызове post_to_words, вы также проделываете много работы, все, что вам нужно сделать, это перебрать fiance_forum["Post_Text"] передачу каждого элемента в функцию. Вам также нужно создать набор стоп-слов только один раз, а не на каждой итерации:

from collections import Counter

def post_to_words(raw_pos, st):
    HTML_text = BeautifulSoup(raw_post).get_text()
    letters_only = re.sub("[^a-zA-Z]", " ", HTML_text)
    words = letters_only.lower().split()
    return (w for w in words if w not in st)



cn = Counter()
st = set(stopwords.words("english"))
for post in fiance_forum["Post_Text"]:
    cn.update(post_to_words(post, st)

Это также избавляет от необходимости создавать огромный список слов, выполняя подсчет по ходу дела.

24.05.2016
  • хорошо, я пробовал это, но теперь я хотел бы получить результат. Что бы я ввел в этот момент? Извините... я новенький. 25.05.2016
  • @GinaBoBina, счетчики хранятся в cn 25.05.2016

  • 2

    Вы почти закончили, все, что вам нужно, это разбить строку на слова:

    >>> from collections import Counter
    >>> Counter('please follow instructions notice move receiver'.split())
    Counter({'follow': 1,
             'instructions': 1,
             'move': 1,
             'notice': 1,
             'please': 1,
             'receiver': 1})
    
    24.05.2016
  • Спасибо. Я, вероятно, должен упомянуть, что существует более 400000 сообщений, поэтому, поскольку я не могу напечатать весь пост для каждого, есть ли другой способ получить отдельные слова в столбце, подобные этому? Извините, если ответ очевиден... Я новичок. Спасибо еще раз! 25.05.2016
  • @GinaBoBina Я не уверен, что следую 25.05.2016
  • @aldanor... о, извини. Я просто имел в виду, что Count('пожалуйста, следуйте инструкциям, обратите внимание на перемещение получателя'.split()) разделит это предложение, и это здорово. Однако мне нужно разделить более 400 000 предложений. Имеет ли это больше смысла? Спасибо еще раз! 25.05.2016
  • @GinaBoBina Я только что измерил время, на моем ящике разделение предложения из примера занимает 400 наносекунд, а разделение и подсчет занимает около 5 микросекунд. В любом случае, вероятно, потребуется всего несколько секунд, чтобы просмотреть 400 000 сообщений. Кроме того, как уже упоминалось выше, если у вас уже есть список значимых слов, вам не нужно объединять их в строку только для того, чтобы затем снова разделить, вы можете передать это непосредственно счетчику. 25.05.2016
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..