Стратегия SEO

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью Python

Размер и различие словарного запаса являются семантическими и лингвистическими понятиями для математической и качественной лингвистики.

Например, закон Хипса утверждает, что длина статьи и размер словарного запаса коррелируют друг с другом. Тем не менее, после определенного порога одни и те же слова продолжают появляться без увеличения словарного запаса.

Word2Vec использует Continuous Bag of Words (CBOW) и Skip-gram для понимания локально контекстуально релевантных слов и их расстояния друг от друга. В то же время GloVe пытается использовать матричную факторизацию с контекстными окнами.

Закон Ципфа является дополнительной теорией к закону Хипса. В нем говорится, что наиболее часто встречающиеся и вторые по частоте слова имеют между собой постоянную процентную разницу.

Существуют и другие дистрибутивные семантики и лингвистические теории статистической обработки естественного языка.

Но «словарное сравнение» — это фундаментальная методология для поисковых систем, позволяющая понять «различия в актуальности», «основную тему документа» или общую «специализацию документа».



Пол Хаар из Google заявил, что он сравнивает «словарь запросов» со «словарём документов».

Дэвид С. Тейлор и его разработки для доменов контекста включают определенные векторы слов в векторный поиск, чтобы увидеть, какой документ и какой подраздел документа о чем больше, поэтому поисковая система может ранжировать и переранжировать документы на основе модификаций поискового запроса.

Сравнение словарного запаса между ранжируемыми веб-страницами на странице результатов поисковой системы (SERP) помогает SEO-специалистам увидеть, какие контексты, одновременные слова и близость слов они пропускают по сравнению с их конкурентами.

Полезно видеть контекстные различия в документах.

В этом руководстве язык программирования Python используется для поиска в Google и получения элементов SERP (фрагментов) для сканирования их содержимого, токенизации и сравнения их словарного запаса друг с другом.

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью Python

 

Как сравнить словарный запас рейтинговых веб-документов с Python?

Для сравнения словарей ранжирования веб-документов (с Python) используемые библиотеки и пакеты языка программирования Python перечислены ниже.

  • Googlesearch — это пакет Python для выполнения поиска в Google с запросом, регионом, языком, количеством результатов, частотой запросов или фильтрами безопасного поиска.
  • URLlib — это библиотека Python для разбора URL-адресов на netloc, схему или путь.
  • Запросы (необязательно) должны брать заголовки, описания и ссылки на элементы SERP (фрагменты).
  • Fake_useragent — это пакет Python для использования поддельных и случайных пользовательских агентов для предотвращения кодов состояния 429.
  • Advertools используется для сканирования URL-адресов в результатах поиска Google, чтобы взять их основной текст для очистки и обработки текста.
  • Панды регулируют и агрегируют данные для дальнейшего анализа дистрибутивной семантики документов в поисковой выдаче.
  • Набор Natural LanguageTool используется для токенизации содержимого документов и использования английских стоп-слов для удаления стоп-слов.
  • Коллекции для использования метода «Счетчик» для подсчета встречаемости слов.
  • Строка представляет собой модуль Python, который вызывает все знаки препинания в списке для очистки знаков препинания.

Каковы шаги для сравнения размеров словарного запаса и контента между веб-страницами?

Шаги для сравнения размера словарного запаса и содержания ранжируемых веб-страниц перечислены ниже.

  • Импортируйте необходимые библиотеки и пакеты Python для получения и обработки текстового содержимого веб-страниц.
  • Выполните поиск в Google, чтобы получить URL-адреса результатов в поисковой выдаче.
  • Просканируйте URL-адреса, чтобы получить их основной текст, который содержит их содержимое.
  • Маркировать содержимое веб-страниц для обработки текста в методологиях НЛП.
  • Удалите стоп-слова и знаки препинания для лучшего анализа текста.
  • Подсчитайте количество вхождений слов в контент веб-страницы.
  • Создайте фрейм данных Pandas для дальнейшего и лучшего анализа текста.
  • Выберите два URL-адреса и сравните частоту их слов.
  • Сравните размер и содержание словаря выбранного URL.

1. Импортируйте необходимые библиотеки и пакеты Python для извлечения и обработки текстового содержимого веб-страниц.

Импортируйте необходимые библиотеки и пакеты Python, используя команды и методы «из» и «импорт».

from googlesearch import search

from urllib.parse import urlparse

import requests

from fake_useragent import UserAgent

import advertools as adv

import pandas as pd

from nltk.tokenize import word_tokenize

import nltk

from collections import Counter

from nltk.corpus import stopwords

import string

nltk.download()

Используйте «nltk.download», только если вы используете NLTK впервые. Загрузите все корпуса, модели и пакеты. Откроется окно, как показано ниже.

загрузчик НЛТКСкриншот от автора, август 2022 г.

Обновляйте окно время от времени; если все зеленое, закройте окно, чтобы код, работающий в вашем редакторе кода, остановился и завершился.

Если у вас нет некоторых модулей, указанных выше, используйте метод «pip install» для их загрузки на локальный компьютер. Если у вас есть проект с закрытой средой, используйте виртуальную среду в Python.

2. Выполните поиск в Google, чтобы получить URL-адреса результатов на страницах результатов поисковой системы.

Чтобы выполнить поиск Google для получения URL-адресов результатов в элементах SERP, используйте цикл for в объекте «поиск», который поступает из пакета «Googlesearch».

serp_item_url = []

for i in search("search engine optimization", num=10, start=1, stop=10, pause=1, lang="en", country="us"):

    serp_item_url.append(i)

    print(i)

Объяснение блока кода выше:

  • Создайте пустой объект списка, например «serp_item_url».
  • Запустите цикл for в объекте «поиск», в котором указаны запрос, язык, количество результатов, первый и последний результат и ограничение по стране.
  • Добавьте все результаты к объекту «serp_item_url», что влечет за собой список Python.
  • Распечатайте все URL-адреса, которые вы получили из Google SERP.

Вы можете увидеть результат ниже.

URL-адреса ранжирования по запросу «поисковая оптимизация» приведены выше.

Следующим шагом будет анализ этих URL-адресов для дальнейшей очистки.

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

3. Очистите URL-адреса видеоконтента с веб-страниц результатов.

Чтобы очистить URL-адреса видеоконтента, используйте приведенный ниже блок кода.

parsed_urls = []


for i in range(len(serp_item_url)):

    parsed_url = urlparse(serp_item_url[i])

    i += 1

    full_url = parsed_url.scheme + '://' + parsed_url.netloc + parsed_url.path


    if ('youtube' not in full_url and 'vimeo' not in full_url and 'dailymotion' not in full_url and "dtube" not in full_url and "sproutvideo" not in full_url and "wistia" not in full_url):

        parsed_urls.append(full_url)

Системы поиска видео, такие как YouTube, Vimeo, Dailymotion, Sproutvideo, Dtube и Wistia, очищаются от результирующих URL-адресов, если они появляются в результатах.

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

Например, Pinterest или другие визуальные веб-сайты могут не понадобиться для проверки различий в «размере словарного запаса» между конкурирующими документами.

Объяснение блока кода выше:

  • Создайте объект, например «parsed_urls».
  • Создайте цикл for в диапазоне длины полученного URL-адреса результата.
  • Проанализируйте URL-адреса с помощью «urlparse» из «URLlib».
  • Повторяйте, увеличивая количество «i».
  • Получите полный URL-адрес, объединив «схему», «netloc» и «путь».
  • Выполните поиск с условиями в операторе «если» с условиями «и» для очищаемых доменов.
  • Возьмите их в список с помощью метода «dict.fromkeys».
  • Распечатайте URL-адреса для проверки.

Вы можете увидеть результат ниже.

URL-адреса видеоконтентаСкриншот от автора, август 2022 г.

4. Просканируйте очищенные URL-адреса для получения их содержимого.

Просканируйте очищенные URL-адреса проверки для получения их содержимого с помощью рекламных инструментов.

Вы также можете использовать запросы с методологией цикла for и добавления списка, но рекламные инструменты быстрее сканируют и создают фрейм данных с результирующим выводом.

С помощью запросов вы вручную извлекаете и объединяете все элементы «p» и «heading».

adv.crawl(examine_urls, output_file="examine_urls.jl",

          follow_links=False,

          custom_settings={"USER_AGENT": UserAgent().random,

                           "LOG_FILE": "examine_urls.log",

                           "CRAWL_DELAY": 2})

crawled_df = pd.read_json("examine_urls.jl", lines=True)

crawled_df

Объяснение блока кода выше:

  • Используйте «adv.crawl» для сканирования объекта «examine_urls».
  • Создайте путь для выходных файлов с расширением «jl», который меньше других.
  • Используйте «follow_links=false», чтобы остановить сканирование только для перечисленных URL-адресов.
  • Используйте пользовательские настройки, чтобы указать «случайный пользовательский агент» и файл журнала сканирования, если некоторые URL-адреса не отвечают на запросы сканирования. Используйте конфигурацию задержки сканирования, чтобы предотвратить возможность появления кода состояния 429.
  • Используйте pandas «read_json» с параметром «lines = True», чтобы прочитать результаты.
  • Вызовите «crawled_df», как показано ниже.

Вы можете увидеть результат ниже.

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью PythonСкриншот от автора, август 2022 г.

Вы можете увидеть наши URL-адреса результатов и все их элементы SEO на странице, включая заголовки ответов, размеры ответов и информацию о структурированных данных.

5. Токенизировать содержимое веб-страниц для обработки текста в методологиях НЛП

Токенизация содержимого веб-страниц требует выбора столбца «body_text» результатов сканирования рекламных инструментов и использования «word_tokenize» из NLTK.

crawled_df["body_text"][0]

Строка кода выше вызывает все содержимое одной из страниц результатов, как показано ниже.

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью PythonСкриншот от автора, август 2022 г.

Чтобы токенизировать эти предложения, используйте приведенный ниже блок кода.

tokenized_words = word_tokenize(crawled_df["body_text"][0])

len(tokenized_words)

Мы токенизировали содержимое первого документа и проверили, сколько в нем слов.

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью PythonСкриншот от автора, август 2022 г.

Первый документ, который мы токенизировали для запроса «поисковая оптимизация», содержит 11211 слов. И шаблонный контент включен в это число.

6. Удалите знаки препинания и стоп-слова из корпуса

Удалите знаки препинания и стоп-слова, как показано ниже.

stop_words = set(stopwords.words("english"))
tokenized_words = [word for word in tokenized_words if not word.lower() in stop_words and word.lower() not in string.punctuation]

len(tokenized_words)
Объяснение блока кода выше:

 
  • Создайте набор с «stopwords.words («english»)», чтобы включить все стоп-слова на английском языке. Наборы Python не содержат повторяющихся значений; таким образом, мы использовали набор, а не список, чтобы предотвратить любой конфликт.
  • Используйте понимание списка с операторами «если» и «иначе».
  • Используйте «нижний» метод, чтобы правильно сравнить типы слов «И» или «Кому» с их версиями в нижнем регистре в списке стоп-слов.
  • Используйте модуль «string» и включите «знаки препинания». Обратите внимание, что строковый модуль может не включать все необходимые вам знаки препинания. Для таких ситуаций создайте собственный список знаков препинания и замените эти символы пробелом, используя регулярное выражение и «regex.sub».
  • При желании, чтобы удалить знаки препинания или некоторые другие небуквенные и числовые значения, вы можете использовать метод «isalnum» для строк Python. Но, судя по фразам, это может дать разные результаты. Например, «isalnum» удалит такое слово, как «связанное с ключевым словом», поскольку «-» в середине слова не является буквенно-цифровым. Но string.punctuation не удалит его, поскольку «связанный с ключевым словом» не является пунктуацией, даже если «-» есть.
  • Измерьте длину нового списка.
Новая длина нашего токенизированного списка слов — «5319». Это показывает, что почти половина словарного запаса документа состоит из стоп-слов или знаков препинания. Это может означать, что только 54% ​​слов контекстуальны, а остальные функциональны.

7. Подсчитайте количество вхождений слов в содержании веб-страниц.

Для подсчета вхождений слов из корпуса используется объект «Счетчик» из модуля «Коллекции», как показано ниже.
counted_tokenized_words = Counter(tokenized_words)

counts_of_words_df = pd.DataFrame.from_dict(

    counted_tokenized_words, orient="index").reset_index()

counts_of_words_df.sort_values(by=0, ascending=False, inplace=True)

counts_of_words_df.head(50)

Объяснение блока кода приведено ниже.

  • Создайте переменную, такую ​​как «counted_tokenized_words», чтобы использовать результаты метода Counter.
  • Используйте конструктор «DataFrame» из Pandas, чтобы создать новый фрейм данных из результатов метода Counter для токенизированного и очищенного текста.
  • Используйте метод «from_dict», потому что «Counter» дает объект словаря.
  • Используйте «sort_values» с «by = 0», что означает сортировку на основе строк, а «ascending = False» означает, что наибольшее значение помещается вверху. «Inpace=True» — для того, чтобы сделать новую отсортированную версию постоянной.
  • Вызовите первые 50 строк с помощью метода «head()» панд, чтобы проверить первый вид фрейма данных.

Вы можете увидеть результат ниже.

количество словСкриншот от автора, август 2022 г.

В результатах мы не видим стоп-слова, но некоторые интересные знаки препинания остаются.

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

И модуль «функции» строкового модуля не включает их.

Таким образом, чтобы очистить наш фрейм данных, мы будем использовать пользовательскую лямбда-функцию, как показано ниже.

removed_curly_quotes = "’“”"

counts_of_words_df["index"] = counts_of_words_df["index"].apply(lambda x: float("NaN") if x in removed_curly_quotes else x)

counts_of_words_df.dropna(inplace=True)

counts_of_words_df.head(50)

Объяснение блока кода:

  • Создана переменная с именем «removed_curly_quotes», включающая фигурные одинарные, двойные и прямые двойные кавычки.
  • Использовал функцию «применить» в пандах, чтобы проверить все столбцы с этими возможными значениями.
  • Использовали лямбда-функцию с «float («NaN»), чтобы мы могли использовать метод «dropna» Pandas.
  • Используйте «dropna», чтобы удалить любое значение NaN, которое заменяет определенные версии фигурных кавычек. Добавьте «inplace = True», чтобы навсегда удалить значения NaN.
  • Вызовите новую версию фрейма данных и проверьте ее.

Вы можете увидеть результат ниже.

количество слов dfСкриншот от автора, август 2022 г.

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

С помощью методологии «сюжета» Панды мы можем легко визуализировать это, как показано ниже.

counts_of_words_df.head(20).plot(kind="bar",x="index", orientation="vertical", figsize=(15,10), xlabel="Tokens", ylabel="Count", colormap="viridis", table=False, grid=True, fontsize=15, rot=35, position=1, title="Token Counts from a Website Content with Punctiation", legend=True).legend(["Tokens"], loc="lower left", prop={"size":15})

Объяснение блока кода выше:

  • Используйте метод head, чтобы увидеть первые значимые значения, чтобы получить чистую визуализацию.
  • Используйте «график» с атрибутом «вид», чтобы получить «гистограмму».
  • Поместите ось «x» со столбцами, в которых есть слова.
  • Используйте атрибут ориентации, чтобы указать направление графика.
  • Определите figsize с помощью кортежа, задающего высоту и ширину.
  • Поместите метки x и y для имен осей x и y.
  • Определите цветовую карту с такой конструкцией, как «viridis».
  • Определите размер шрифта, поворот метки, положение метки, название графика, наличие легенды, название легенды, расположение легенды и размер легенды.

Pandas DataFrame Plotting — обширная тема. Если вы хотите использовать «Plotly» в качестве серверной части визуализации Pandas, проверьте визуализацию горячих тем для SEO новостей.

Вы можете увидеть результат ниже.

Графики Pandas DataFrameИзображение от автора, август 2022 г.

Теперь мы можем выбрать наш второй URL-адрес, чтобы начать сравнение размера словаря и встречаемости слов.

8. Выберите второй URL для сравнения размера словарного запаса и встречаемости слов.

Чтобы сравнить предыдущий SEO-контент с конкурирующим веб-документом, мы будем использовать SEO-руководство SEJ. Вы можете увидеть сжатую версию шагов, выполненных до сих пор для второй статьи.

def tokenize_visualize(article:int):

    stop_words = set(stopwords.words("english"))

    removed_curly_quotes = "’“”"

    tokenized_words = word_tokenize(crawled_df["body_text"][article])

    print("Count of tokenized words:", len(tokenized_words))

    tokenized_words = [word for word in tokenized_words if not word.lower() in stop_words and word.lower() not in string.punctuation and word.lower() not in removed_curly_quotes]

    print("Count of tokenized words after removal punctations, and stop words:", len(tokenized_words))

    counted_tokenized_words = Counter(tokenized_words)

    counts_of_words_df = pd.DataFrame.from_dict(

    counted_tokenized_words, orient="index").reset_index()

    counts_of_words_df.sort_values(by=0, ascending=False, inplace=True)

    #counts_of_words_df["index"] = counts_of_words_df["index"].apply(lambda x: float("NaN") if x in removed_curly_quotes else x)

    counts_of_words_df.dropna(inplace=True)

    counts_of_words_df.head(20).plot(kind="bar",

    x="index",

    orientation="vertical",

    figsize=(15,10),

    xlabel="Tokens",

    ylabel="Count",

    colormap="viridis",

    table=False,

    grid=True,

    fontsize=15,

    rot=35,

    position=1,

    title="Token Counts from a Website Content with Punctiation",

    legend=True).legend(["Tokens"],

    loc="lower left",

    prop={"size":15})

Мы собрали все для токенизации, удаления стоп-слов, пунктуации, замены фигурных кавычек, подсчета слов, построения фрейма данных, сортировки фрейма данных и визуализации.

Ниже вы можете увидеть результат.

токенизировать результаты визуализацииСкриншот автора, август 2022 г.

Статья SEJ находится на восьмом месте рейтинга.

tokenize_visualize(8)

Число восемь означает, что он занимает восьмое место во фрейме выходных данных сканирования, что соответствует статье SEJ для SEO. Вы можете увидеть результат ниже.

количество токенов из содержимого веб-сайта и знаков препинанияИзображение от автора, август 2022 г.

Мы видим, что 20 наиболее часто используемых слов в SEO-статье SEJ и других конкурирующих SEO-статьях различаются.

9. Создайте пользовательскую функцию для автоматизации подсчета вхождений слов и визуализации различий в словарном запасе.

Фундаментальный шаг к автоматизации любой SEO-задачи с помощью Python — объединение всех шагов и требований в определенную функцию Python с различными возможностями.

Функция, которую вы увидите ниже, имеет условный оператор. Если вы передаете одну статью, используется один вызов визуализации; для нескольких из них он создает подграфики в соответствии с количеством подзаговоров.

def tokenize_visualize(articles:list, article:int=None):

     if article:

          stop_words = set(stopwords.words("english"))

          removed_curly_quotes = "’“”"

          tokenized_words = word_tokenize(crawled_df["body_text"][article])

          print("Count of tokenized words:", len(tokenized_words))

          tokenized_words = [word for word in tokenized_words if not word.lower() in stop_words and word.lower() not in string.punctuation and word.lower() not in removed_curly_quotes]

          print("Count of tokenized words after removal punctations, and stop words:", len(tokenized_words))

          counted_tokenized_words = Counter(tokenized_words)

          counts_of_words_df = pd.DataFrame.from_dict(

          counted_tokenized_words, orient="index").reset_index()

          counts_of_words_df.sort_values(by=0, ascending=False, inplace=True)

          #counts_of_words_df["index"] = counts_of_words_df["index"].apply(lambda x: float("NaN") if x in removed_curly_quotes else x)

          counts_of_words_df.dropna(inplace=True)

          counts_of_words_df.head(20).plot(kind="bar",

          x="index",

          orientation="vertical",

          figsize=(15,10),

          xlabel="Tokens",

          ylabel="Count",

          colormap="viridis",

          table=False,

          grid=True,

          fontsize=15,

          rot=35,

          position=1,

          title="Token Counts from a Website Content with Punctiation",

          legend=True).legend(["Tokens"],

          loc="lower left",

          prop={"size":15})

     

     if articles:

          source_names = []

          for i in range(len(articles)):

               source_name = crawled_df["url"][articles[i]]

               print(source_name)

               source_name = urlparse(source_name)

               print(source_name)

               source_name = source_name.netloc

               print(source_name)

               source_names.append(source_name)

          global dfs

          dfs = []

          for i in articles:

               stop_words = set(stopwords.words("english"))

               removed_curly_quotes = "’“”"

               tokenized_words = word_tokenize(crawled_df["body_text"][i])

               print("Count of tokenized words:", len(tokenized_words))

               tokenized_words = [word for word in tokenized_words if not word.lower() in stop_words and word.lower() not in string.punctuation and word.lower() not in removed_curly_quotes]

               print("Count of tokenized words after removal punctations, and stop words:", len(tokenized_words))

               counted_tokenized_words = Counter(tokenized_words)

               counts_of_words_df = pd.DataFrame.from_dict(

               counted_tokenized_words, orient="index").reset_index()

               counts_of_words_df.sort_values(by=0, ascending=False, inplace=True)

               #counts_of_words_df["index"] = counts_of_words_df["index"].apply(lambda x: float("NaN") if x in removed_curly_quotes else x)

               counts_of_words_df.dropna(inplace=True)

               df_individual = counts_of_words_df

               dfs.append(df_individual)

               

          import matplotlib.pyplot as plt

          figure, axes = plt.subplots(len(articles), 1)

          for i in range(len(dfs) + 0):

               dfs[i].head(20).plot(ax = axes[i], kind="bar",

                    x="index",

                    orientation="vertical",

                    figsize=(len(articles) * 10, len(articles) * 10),

                    xlabel="Tokens",

                    ylabel="Count",

                    colormap="viridis",

                    table=False,

                    grid=True,

                    fontsize=15,

                    rot=35,

                    position=1,

                    title= f"{source_names[i]} Token Counts",

                    legend=True).legend(["Tokens"],

                    loc="lower left",

                    prop={"size":15})

Чтобы статья была краткой, я не буду добавлять объяснение для них. Тем не менее, если вы ознакомитесь с предыдущими руководствами по SEJ Python SEO, которые я написал, вы поймете, что похожие функции оболочки.

Давайте использовать его.

tokenize_visualize (статьи = [1, 8, 4])

Мы хотели взять первую, восьмую и четвертую статьи и визуализировать их 20 лучших слов и их появление; вы можете увидеть результат ниже.

визуализация 20 лучших словИзображение от автора, август 2022 г.

10. Сравните количество уникальных слов в документах

Благодаря pandas сравнить количество уникальных слов в документах довольно просто. Вы можете проверить пользовательскую функцию ниже.

def compare_unique_word_count(articles:list):

     source_names = []

     for i in range(len(articles)):

          source_name = crawled_df["url"][articles[i]]

          source_name = urlparse(source_name)

          source_name = source_name.netloc

          source_names.append(source_name)


     stop_words = set(stopwords.words("english"))

     removed_curly_quotes = "’“”"

     i = 0

     for article in articles:

          text = crawled_df["body_text"][article]

          tokenized_text = word_tokenize(text)

          tokenized_cleaned_text = [word for word in tokenized_text if not word.lower() in stop_words if not word.lower() in string.punctuation if not word.lower() in removed_curly_quotes]

          tokenized_cleanet_text_counts = Counter(tokenized_cleaned_text)

          tokenized_cleanet_text_counts_df = pd.DataFrame.from_dict(tokenized_cleanet_text_counts, orient="index").reset_index().rename(columns={"index": source_names[i], 0: "Counts"}).sort_values(by="Counts", ascending=False)

          i += 1

          print(tokenized_cleanet_text_counts_df, "Number of unique words: ",  tokenized_cleanet_text_counts_df.nunique(), "Total contextual word count: ", tokenized_cleanet_text_counts_df["Counts"].sum(), "Total word count: ", len(tokenized_text))

compare_unique_word_count(articles=[1, 8, 4])

Результат ниже.

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

www.wordstream.com

16 Гугл 71

82 ЭТО 66

186 поиск 43

228 сайт 28

274 стр. 27

…                 …     …

510 наценка/структурированная 1

1 Последние 1

514 ошибка 1

515 низ 1

1024 LinkedIn 1

[1025 строк x 2 столбца] Количество уникальных слов:

 www.wordstream.com    1025

Считает 24

dtype: int64 Общее количество контекстных слов: 2399 Общее количество слов: 4918

www.searchenginejournal.com

9 ЭТО 93

242 поиск 25

64 Руководство 23

40 Содержание 17

13 Гугл 17

..                          …     …

229 Действие 1

228 Переезд 1

227 Проворный 1

226                          32       1

465 новости 1

[466 строк x 2 столбца] Количество уникальных слов:

 www.searchenginejournal.com    466

Считает 16

dtype: int64 Общее количество контекстных слов: 1019 Общее количество слов: 1601

blog.hubspot.com

166 ЭТО 86

160 поиск 76

32 содержание 46

368 стр. 40

327 ссылок 39

…               …     …

695 идея 1

697 говорили 1

698 ранее 1

699 Анализ 1

1326 Безопасность 1

[1327 строк x 2 столбца] Количество уникальных слов:

 blog.hubspot.com    1327

Считает 31

dtype: int64 Общее количество контекстных слов: 3418 Общее количество слов: 6728

Есть 1025 уникальных слов из 2399 не стоп-слов и не пунктуационных контекстуальных слов. Общее количество слов 4918.

Наиболее часто используемые пять слов: «Google», «SEO», «поиск», «сайт» и «страница» для «Wordstream». Вы можете увидеть другие с теми же номерами.

11. Сравните словарные различия между документами в поисковой выдаче.

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

Методология проста: тип объекта «набор» имеет метод «разница», чтобы показать разные значения между двумя наборами.

def audit_vocabulary_difference(articles:list):

     stop_words = set(stopwords.words("english"))

     removed_curly_quotes = "’“”"

     global dfs

     global source_names

     source_names = []

     for i in range(len(articles)):

          source_name = crawled_df["url"][articles[i]]

          source_name = urlparse(source_name)

          source_name = source_name.netloc

          source_names.append(source_name)

     i = 0

     dfs = []

     for article in articles:

               text = crawled_df["body_text"][article]

               tokenized_text = word_tokenize(text)

               tokenized_cleaned_text = [word for word in tokenized_text if not word.lower() in stop_words if not word.lower() in string.punctuation if not word.lower() in removed_curly_quotes]

               tokenized_cleanet_text_counts = Counter(tokenized_cleaned_text)

               tokenized_cleanet_text_counts_df = pd.DataFrame.from_dict(tokenized_cleanet_text_counts, orient="index").reset_index().rename(columns={"index": source_names[i], 0: "Counts"}).sort_values(by="Counts", ascending=False)

               tokenized_cleanet_text_counts_df.dropna(inplace=True)

               i += 1

               df_individual = tokenized_cleanet_text_counts_df

               dfs.append(df_individual)

     global vocabulary_difference

     vocabulary_difference = []

     for i in dfs:

          vocabulary = set(i.iloc[:, 0].to_list())

          vocabulary_difference.append(vocabulary)

     print( "Words that appear on :", source_names[0], "but not on: ", source_names[1], "are below: \n", vocabulary_difference[0].difference(vocabulary_difference[1]))

Для краткости я не буду объяснять функциональные строки одну за другой, но в основном мы берем уникальные слова из нескольких статей и сравниваем их друг с другом.

Вы можете увидеть результат ниже.

Слова, которые появляются на: www.techtarget.com, но не на: moz.com, приведены ниже:

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью PythonСкриншот автора, август 2022 г.

Используйте пользовательскую функцию ниже, чтобы увидеть, как часто эти слова используются в конкретном документе.

def unique_vocabulry_weight():

     audit_vocabulary_difference(articles=[3, 1])

vocabulary_difference_list = vocabulary_difference_df[0].to_list()

     return dfs[0][dfs[0].iloc[:, 0].isin(vocabulary_difference_list)]

unique_vocabulry_weight()

Результаты ниже.

Сравните различия в словарном запасе между ранжированием веб-страниц в поисковой выдаче с помощью PythonСкриншот автора, август 2022 г.

Разница в словарном запасе между TechTarget и Moz для запроса «поисковая оптимизация» с точки зрения TechTarget приведена выше. Мы можем обратить это вспять.

def unique_vocabulry_weight():

audit_vocabulary_difference(articles=[1, 3])

vocabulary_difference_list = vocabulary_difference_df[0].to_list()

return dfs[0][dfs[0].iloc[:, 0].isin(vocabulary_difference_list)]

unique_vocabulry_weight()

Измените порядок чисел. Проверьте с другой точки зрения.

moz подсчитывает результатыСкриншот автора, август 2022 г.

Вы можете видеть, что Wordstream имеет 868 уникальных слов, которые не появляются на Boosmart, а первые пять и последние пять слов приведены выше с их встречаемостью.

Аудит различий в словарном запасе можно улучшить с помощью «взвешенной частоты» путем проверки информации запроса и сети.

Но для учебных целей это уже тяжелый, подробный и продвинутый интенсивный курс Python, Data Science и SEO.

Увидимся в следующих руководствах и учебниках.

Дополнительные ресурсы:


Рекомендуемое изображение: VectorMine/Shutterstock

Информация для Вас была полезна?
0
0
0
0
0
0
0

Похожие статьи

Кнопка «Наверх»