Python WordCloud не удаляет стоп-слова

Я пытаюсь создать Wordcloud, который автоматически извлекает слова из описания работы и создает облако слов. Если у вас есть стоп-слова = Нет, предполагается удалить список известных стоп-слов wordcloud, но моя программа этого не делает. Я полагаю, что это может быть связано с тем, как я тяну описание работы с красивым супом. Мне нужна помощь, либо я по-разному вытягиваю слова с BeautifulSoup, либо я неправильно использую стоп-слова.

import requests
# pip install bs4
from bs4 import BeautifulSoup
# pip install wordcloud
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Goes to a job description
url = "https://career.benteler.jobs/job/Paderborn-Head-of-Finance-&-Controlling-North-America-NW/604307901/?locale=en_US"
html_text = requests.get(url).text
soup = BeautifulSoup(html_text, 'html.parser')

# Goes through all the words in the beautiful soup text
combinedWords = ''

for words in soup.find_all('span'):
    separatedWords = words.text.split(' ')
    combinedWords += " ".join(separatedWords) + ' '

# creates wordcloud
resumeCloud = WordCloud(stopwords=None, background_color='white', max_words=75, max_font_size=75, random_state=1).generate(combinedWords)

plt.figure(figsize=(8, 4))
plt.imshow(resumeCloud)
plt.axis('off')
plt.show()

person Brandon Jacobson    schedule 01.07.2020    source источник
comment
Дубликат stackoverflow.com/questions/61953788/   -  person barny    schedule 01.07.2020
comment
@barny, второй точно помог. Установка словосочетания = False сработала. Спасибо.   -  person Brandon Jacobson    schedule 01.07.2020


Ответы (1)


Основная проблема в том, что весь код находится в одном блоке. Попробуйте разбить логику на методы и протестировать каждый бит отдельно. запрос не проверяет наличие ошибок (например, сервер может быть недоступен, но сейчас это не должно быть проблемой).

BeautifulSoup извлекает все элементы span на странице. Это означает, что он будет включать меню/нижний колонтитул. Если вам нужно описание задания, вы можете выбрать диапазон с описанием задания имени класса. После этого вы можете вызвать text для удаления html. Я не уверен, что вам нужно удалить другие вещи, такие как запятые и точки.

У меня нет опыта работы с Word Cloud. Однако в приведенном ниже коде он возвращает что-то похожее на результаты.

import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def get_job_html(url):
    response = requests.get(url)
    response.raise_for_status() # check for 4xx & 5xx errors
    return response.text

def extract_combined_words(html):
    soup = BeautifulSoup(html, 'html.parser')
    job_description = soup.find("span", {"class": "jobdescription"}).text.replace('\n', ' ') # Target span with class jobdescription. text will strip out html.
    print(job_description) # TODO - Check this is the results you expect?
    return job_description

def create_resume_cloud(combinedWords):
    return WordCloud(stopwords=None, background_color='white', max_words=75, max_font_size=75, random_state=1).generate(combinedWords)

def plot_resume_cloud(resumeCloud):
    plt.figure(figsize=(8, 4))
    plt.imshow(resumeCloud)
    plt.axis('off')
    plt.show()

def run(url):
    html = get_job_html(url)
    combinedWords = extract_combined_words(html)
    resumeCloud = create_resume_cloud(combinedWords)
    plt = plot_resume_cloud(resumeCloud)
    return plt # TODO - not sure how the results gets consumed

if __name__ == '__main__':
    run("https://career.benteler.jobs/job/Paderborn-Head-of-Finance-&-Controlling-North-America-NW/604307901/?locale=en_US")
person Greg    schedule 01.07.2020
comment
это именно то, что я искал, чтобы очистить данные. Кроме того, кто-то еще дал мне решение WordCloud. Спасибо!!!!! - person Brandon Jacobson; 01.07.2020