آشنایی با پردازش زبان طبیعی با پایتون برای SEO

پردازش زبان طبیعی (NLP) برای متخصصان سئو از همیشه مهمتر شده است.

شروع به ساختن مهارتهایی که شما را برای همه تغییرات شگفت انگیز که در اطراف ما اتفاق می افتد بسیار مهم است.

امیدوارم این ستون شما را برای شروع کار انگیزه دهد!

ما می خواهیم NLP عملی را هنگام ساختن یک نمودار دانش ساده از ابتدا یاد بگیریم.

از آنجا که گوگل ، بینگ و سایر موتورهای جستجو از دانش دانش برای رمزگذاری دانش و غنی سازی نتایج جستجو استفاده می کنند ، چه راهی بهتر برای ساختن آنها وجود دارد؟

به طور خاص ، ما می خواهیم حقایق مفید را بطور خودکار از نقشه های نقشه موتور XML ژورنال استخراج کنیم.

برای انجام این کار و ساده و سریع کارها ، عناوین مقاله را از URL ها در نقشه های XML بیرون می آوریم.

ما اشخاص نامیده شده و روابط آنها را از عناوین استخراج خواهیم کرد.

سرانجام ، ما یک نمودار دانش قدرتمند خواهیم ساخت و محبوب ترین روابط را تجسم می کنیم.

در مثال زیر رابطه “راه اندازی می شود”.

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

روش خواندن نمودار پیروی از جهت فلش ها است: موضوع “راه اندازی” هدف – شی.

تبلیغات

ادامه خواندن در زیر

مثلا:

  • “بینگ 19 نقشه ردیابی را راه اندازی کرد” ، که احتمالاً “بینگ نقشه ردیابی covid-19 را راه اندازی می کند.”
  • مورد دیگر “اسنپ چت برنامه صدور گواهینامه تبلیغات را راه اندازی می کند.”

این حقایق و بیش از هزاران مورد دیگر به صورت خودکار استخراج و گروه بندی شدند!

بیایید سرگرم کننده شویم

در اینجا برنامه فنی است:

  • همه نقشه های ژورنال موتور جستجوی XML را بارگیری می کنیم.
  • ما URL ها را برای استخراج عناوین از شلغم ها تجزیه خواهیم کرد.
  • ما جفت های موجودیت را از عناوین استخراج می کنیم.
  • ما روابط مربوطه را استخراج خواهیم کرد.
  • ما یک نمودار دانش ایجاد خواهیم کرد و یک شکل ساده در Colab ایجاد می کنیم تا روابط مورد نظر خود را تجسم کنیم.

واکشی همه نقشه های ژورنال موتور جستجو XML XML

من اخیراً با او گفتگویی روشنگری داشتم الیاس داباس از سوپر مارکت رسانه و درمورد کتابخانه شگفت انگیز پایتون برای بازاریابان یاد گرفتید: تبلیغات.

برخی از مقالات قدیمی موتور جستجو من با نسخه های جدیدتر کتابخانه کار نمی کنند. او به من ایده خوبی داد.

تبلیغات

ادامه خواندن در زیر

اگر نسخه های کتابخانه های شخص ثالث را الان چاپ کنم ، تهیه کد در آینده آسان خواهد بود.

من فقط نیاز به نصب نسخه هایی که کار می کنند در هنگام عدم موفقیت است. 🤓

%%capture

!pip install advertools
import advertools as adv

print(adv.__version__)

#0.10.6

ما قصد داریم همه نقشه های ژورنال موتور جستجو را در یک قاب داده pandas با دو خط کد بارگیری کنیم.

sitemap_url = "https://www.searchenginejournal.com/sitemap_index.xml" 
df= adv.sitemap_to_df(sitemap_url)

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

یک ویژگی جالب در بسته بندی این است که تمام نقشه های پیوند شده را در فهرست بارگیری کرده و از یک فریم مناسب داده می گیریم.

نگاه کنید که فیلتر کردن مقالات / صفحات از امسال چقدر ساده است. ما 1،550 مقاله داریم.

df[df["lastmod"] > '2020-01-01']

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

عناوین را از URL ها استخراج کنید

کتابخانه adsools تابعی برای شکستن URL ها در چهارچوب داده دارد ، اما اجازه دهید این کار را بصورت دستی انجام دهیم تا با روند کار آشنا شویم.

from urllib.parse import urlparse

import re
example_url="https://www.searchenginejournal.com/google-be-careful-relying-on-3rd-parties-to-render-website-content/376547/"

u = urlparse(example_url)
print(u) #output -> ParseResult(scheme='https', netloc='www.searchenginejournal.com', path='/google-be-careful-relying-on-3rd-parties-to-render-website-content/376547/', params='', query='', fragment='')

در اینجا ما به یک دست و پا زدن به نام ، ParseResult، با تفکیک مؤلفه های URL.

مقاله پیشنهادی  Mueller گوگل با سبک 2.0 وب پیوندهای Spammy را فراخوانی می کند

ما علاقه مندیم path.

ما قصد داریم از یک regex ساده برای تقسیم آن توسط / و – کاراکترها استفاده کنیم

slug = re.split("[/-]", u.path)

print(slug)
#output

['', 'google', 'be', 'careful', 'relying', 'on', '3rd', 'parties', 'to', 'render', 'website', 'content', '376547', '']

بعد ، می توانیم آن را به یک رشته تبدیل کنیم.

headline = " ".join(slug)

print(headline)

# خروجی

' google be careful relying on 3rd parties to render website content 376547 '

اسلایدها حاوی شناسه صفحه هستند که برای ما بی فایده است. ما با یک رجکس حذف خواهیم کرد.

headline = re.sub("d{6}", "",headline)

print(headline)
#output

' google be careful relying on 3rd parties to render website content '


#Strip whitespace at the borders

headline = headline.strip()
print(headline)
#output

'google be careful relying on 3rd parties to render website content'

اکنون که این مورد را آزمایش کردیم ، می توانیم این کد را به یک تابع تبدیل کنیم و یک ستون جدید در قاب داده خود ایجاد کنیم.

def get_headline(url):

  u = urlparse(url)

  if len(u.path) > 1:

    slug = re.split("[/-]", u.path)

    new_headline = re.sub("d{6}", ""," ".join(slug)).strip()

    #skip author and category pages

    if not re.match("author|category", new_headline):

      return new_headline

  return ""

بیایید یک ستون جدید با عنوان عنوان ایجاد کنیم.

new_df["headline"] = new_df["url"].apply(lambda x: get_headline(x))

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

استخراج اشخاص نامگذاری شده

بیایید موجودات موجود در عناوین ما را بررسی و تجسم کنیم.

ابتدا آنها را در یک سند متنی واحد ترکیب می کنیم.

import spacy

from spacy import displacy

text = "n".join([x for x in new_df["headline"].tolist() if len(x) > 0])

nlp = spacy.load("en_core_web_sm")

doc = nlp(text)

displacy.render(doc, style="ent", jupyter=True)

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها
ما می توانیم بعضی از موجودات را به درستی برچسب گذاری کنیم و برخی به اشتباه مانند Hulu به عنوان یک شخص نام برده شوند.

تبلیغات

ادامه خواندن در زیر

چندین فیس بوک مانند Facebook و Google Display Network نیز وجود دارد.

spaCy خارج از جعبه NER کامل نیست و به طور کلی برای بهبود تشخیص نیاز به آموزش با داده های سفارشی دارد ، اما این به اندازه کافی خوب است تا مفاهیم موجود در این آموزش را نشان دهد.

ساخت نمودار دانش

اکنون به قسمت مهیج می رسیم.

بیایید با ارزیابی روابط گرامری بین کلمات در هر جمله شروع کنیم.

ما این کار را با چاپ وابستگی نحوی موجودات انجام می دهیم.

for tok in doc[:100]:

  print(tok.text, "...", tok.dep_)

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

ما به دنبال سوژه ها و اشیاء مرتبط با یک رابطه هستیم.

تبلیغات

ادامه خواندن در زیر

ما برای تجزیه و تحلیل سوژه ها و اشیاء از عناوین از تجزیه گر مبتنی بر spaCy استفاده خواهیم کرد.

این قانون می تواند چیزی شبیه به این باشد:

سوژه / موضوع را به همراه اصلاح کننده های آن ، کلمات مرکب استخراج کنید و همچنین علائم نقطه گذاری را بین آنها استخراج کنید.

بیایید ابتدا کتابخانه های مورد نیاز خود را وارد کنیم.

from spacy.matcher import Matcher

from spacy.tokens import Span

import networkx as nx

import matplotlib.pyplot as plt

from tqdm import tqdm

برای ساختن نمودار دانش ، مهمترین چیزها گره ها و لبه های بین آنها است.

مقاله پیشنهادی  چگونه (و چرا) موتورهای جستجو صفحات ارائه دهنده

ایده اصلی این است که از هر جمله عبور کرده و دو لیست ایجاد کنید. یکی با موجودیت موجودیت و دیگری با روابط مربوطه.

ما قصد داریم دو عملکردی که توسط Data Scientist ، Prateek Joshi ایجاد شده است را قرض بگیریم.

  • مورد اول ، get_entities موجودات اصلی و خصوصیات مرتبط را استخراج می کند.
  • مورد دوم ، get_relations روابط متناظر بین موجودات را استخراج می کند.

بیایید آنها را بر روی 100 جمله آزمایش کنیم و ببینیم خروجی چگونه به نظر می رسد. من اضافه کردم len(x) > 0 برای جستجوی خطوط خالی.

for t in [x for x in new_df["headline"].tolist() if len(x) > 0][:100]:

  print(get_entities

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

بسیاری از استخراج ها عناصر از دست رفته یا عالی نیستند ، اما همانطور که ما عناوین زیادی داریم ، به هر حال باید بتوانیم حقایق مفیدی را استخراج کنیم.

تبلیغات

ادامه خواندن در زیر

اکنون ، اجازه دهید نمودار را بسازیم.

entity_pairs = []

for i in tqdm([x for x in new_df["headline"].tolist() if len(x) > 0]):

  entity_pairs.append(get_entities(i))

در اینجا چند جفت مثال وجود دارد.

entity_pairs[10:20]
#output

[['chrome', ''], ['google assistant', '500 million 500 users'], ['', ''], ['seo metrics', 'how them'], ['google optimization', ''], ['twitter', 'new explore tab'], ['b2b', 'greg finn podcast'], ['instagram user growth', 'lower levels'], ['', ''], ['', 'advertiser']]

بعد ، بیایید روابط مربوطه را ایجاد کنیم. فرضیه ما این است که محمول در واقع فعل اصلی یک جمله است.

relations = [get_relation(i) for i in tqdm([x for x in new_df["headline"].tolist() if len(x) > 0])]
print(relations[10:20])

#output
['blocker', 'has', 'conversions', 'reports', 'ppc', 'rolls', 'paid', 'drops to lower', 'marketers', 'facebook']

سپس ، روابط را رتبه بندی می کنیم.

pd.Series(relations).value_counts()[4:50]

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

در آخر ، اجازه دهید نمودار دانش را بسازیم.

# extract subject

source = [i[0] for i in entity_pairs]

# extract object

target = [i[1] for i in entity_pairs]

kg_df = pd.DataFrame({'source':source, 'target':target, 'edge':relations})
# create a directed-graph from a dataframe

G=nx.from_pandas_edgelist(kg_df, "source", "target",

edge_attr=True, create_using=nx.MultiDiGraph())
plt.figure(figsize=(12,12))

pos = nx.spring_layout(G)

nx.draw(G, with_labels=True, node_color='skyblue', edge_cmap=plt.cm.Blues, pos = pos)

plt.show()

این یک نمودار هیولا را ترسیم می کند ، که ، هر چند چشمگیر است ، اما به خصوص مفید نیست.

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

بیایید دوباره امتحان کنیم ، اما یک بار فقط یک رابطه برقرار کنیم.

تبلیغات

ادامه خواندن در زیر

برای انجام این کار ، ما تابعی را ایجاد می کنیم که متن رابطه را به عنوان ورودی (متن پررنگ) منتقل می کنیم.

def display_graph(relation):

  G=nx.from_pandas_edgelist(kg_df[kg_df['edge']==relation], "source", "target", 

                            edge_attr=True, create_using=nx.MultiDiGraph())

  plt.figure(figsize=(12,12))

  pos = nx.spring_layout(G, k = 0.5) # k regulates the distance between nodes

  nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_cmap=plt.cm.Blues, pos = pos)

  plt.show()

حالا ، وقتی دویدم display_graph("launches")، من نمودار را در ابتدای مقاله می گیرم.

در اینجا چند رابطه دیگر است که من طرح کردم.

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

من یک نوت بوک Colab را با تمام مراحل موجود در این مقاله ایجاد کردم و در پایان فرم خوبی با روابط بسیار بیشتری پیدا خواهید کرد تا بررسی کنید.

تبلیغات

ادامه خواندن در زیر

فقط تمام کد ها را اجرا کنید ، روی انتخاب کننده pulldown کلیک کنید و بر روی دکمه play کلیک کنید تا نمودار را ببینید.

مقاله پیشنهادی  تأثیر عکس بر روی SEO

مقدمه ای برای پردازش زبان طبیعی با پایتون برای جستجوگرها

منابعی برای کسب اطلاعات بیشتر و پروژه های جامعه

در اینجا منابعی وجود دارد که در کنار هم گذاشتن این آموزش ، مفید واقع شده ام.

من از پیروانم خواستم تا پروژه های پایتون را به اشتراک بگذارند و هیجان زده شدم تا ببینم چند ایده خلاق از جامعه به وجود می آید! 🐍🔥

تبلیغات

ادامه خواندن در زیر

تبلیغات

ادامه خواندن در زیر

منابع بیشتر:


اعتبار تصویر

تمام تصاویر گرفته شده توسط نویسنده ، آگوست 2020