۱. مرور کلی

رابط برنامهنویسی کاربردی زبان طبیعی (Natural Language API) به شما امکان میدهد با استفاده از یادگیری ماشینی گوگل، اطلاعات را از متن بدون ساختار استخراج کنید. در این آموزش، بر استفاده از کتابخانه کلاینت پایتون آن تمرکز خواهید کرد.
آنچه یاد خواهید گرفت
- چگونه محیط خود را تنظیم کنید
- نحوه انجام تحلیل احساسات
- نحوه انجام تحلیل موجودیت
- نحوه انجام تحلیل نحوی
- نحوه انجام طبقهبندی محتوا
- نحوه انجام تعدیل متن
آنچه نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با پایتون چگونه ارزیابی میکنید؟
تجربه خود را با خدمات ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. شما همیشه میتوانید آن را بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید شناسه پروژه خود را (که معمولاً با عنوان
PROJECT_IDشناخته میشود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی میماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینهای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، میتوانید منابعی را که ایجاد کردهاید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان گوگل کلود را از راه دور و از طریق لپتاپ شما مدیریت کرد، اما در این آزمایشگاه کد از Cloud Shell ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.

اگر این اولین باری است که Cloud Shell را اجرا میکنید، یک صفحه میانی برای توضیح آن به شما نمایش داده میشود. اگر با یک صفحه میانی مواجه شدید، روی ادامه کلیک کنید.

آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش میدهد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان با یک مرورگر انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شدهاید و پروژه روی شناسه پروژه شما تنظیم شده است.
- برای تأیید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list
خروجی دستور
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر اینطور نیست، میتوانید با این دستور آن را تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی دستور
Updated property [core/project].
۳. تنظیمات محیطی
قبل از اینکه بتوانید از API زبان طبیعی استفاده کنید، دستور زیر را در Cloud Shell اجرا کنید تا API فعال شود:
gcloud services enable language.googleapis.com
شما باید چیزی شبیه به این را ببینید:
Operation "operations/..." finished successfully.
حالا میتوانید از API زبان طبیعی استفاده کنید!
به دایرکتوری خانگی خود بروید:
cd ~
یک محیط مجازی پایتون برای جداسازی وابستگیها ایجاد کنید:
virtualenv venv-language
فعال کردن محیط مجازی:
source venv-language/bin/activate
کتابخانه کلاینت IPython، Pandas و API زبان طبیعی را نصب کنید:
pip install ipython pandas tabulate google-cloud-language
شما باید چیزی شبیه به این را ببینید:
... Installing collected packages: ... pandas ... ipython ... google-cloud-language Successfully installed ... google-cloud-language-2.11.0 ...
حالا، شما آماده استفاده از کتابخانه کلاینت API زبان طبیعی هستید!
در مراحل بعدی، از یک مفسر تعاملی پایتون به نام IPython که در مرحله قبل نصب کردهاید، استفاده خواهید کرد. با اجرای ipython در Cloud Shell، یک جلسه را شروع کنید:
ipython
شما باید چیزی شبیه به این را ببینید:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.15.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
۴. تحلیل احساسات
تحلیل احساسات، متن داده شده را بررسی کرده و نظرات احساسی غالب در متن را شناسایی میکند، به ویژه برای تعیین احساسات بیان شده به عنوان مثبت، منفی یا خنثی، هم در سطح جمله و هم در سطح سند. این کار با متد analyze_sentiment انجام میشود که یک AnalyzeSentimentResponse را برمیگرداند.
کد زیر را در جلسه IPython خود کپی کنید:
from google.cloud import language
def analyze_text_sentiment(text: str) -> language.AnalyzeSentimentResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_sentiment(document=document)
def show_text_sentiment(response: language.AnalyzeSentimentResponse):
import pandas as pd
columns = ["score", "sentence"]
data = [(s.sentiment.score, s.text.content) for s in response.sentences]
df_sentence = pd.DataFrame(columns=columns, data=data)
sentiment = response.document_sentiment
columns = ["score", "magnitude", "language"]
data = [(sentiment.score, sentiment.magnitude, response.language)]
df_document = pd.DataFrame(columns=columns, data=data)
format_args = dict(index=False, tablefmt="presto", floatfmt="+.1f")
print(f"At sentence level:\n{df_sentence.to_markdown(**format_args)}")
print()
print(f"At document level:\n{df_document.to_markdown(**format_args)}")
انجام یک تحلیل:
# Input
text = """
Python is a very readable language, which makes it easy to understand and maintain code.
It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks.
One disadvantage is its speed: it's not as fast as some other programming languages.
"""
# Send a request to the API
analyze_sentiment_response = analyze_text_sentiment(text)
# Show the results
show_text_sentiment(analyze_sentiment_response)
شما باید خروجی مانند زیر را ببینید:
At sentence level:
score | sentence
---------+------------------------------------------------------------------------------------------
+0.8 | Python is a very readable language, which makes it easy to understand and maintain code.
+0.9 | It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks.
-0.4 | One disadvantage is its speed: it's not as fast as some other programming languages.
At document level:
score | magnitude | language
---------+-------------+------------
+0.4 | +2.2 | en
لحظهای وقت بگذارید و جملات خودتان را آزمایش کنید.
خلاصه
در این مرحله، شما توانستید تحلیل احساسات را روی یک رشته متن انجام دهید!
۵. تحلیل موجودیت
تحلیل موجودیت، متن داده شده را برای موجودیتهای شناخته شده (اسمهای خاص مانند چهرههای عمومی، مکانهای دیدنی و غیره) بررسی میکند و اطلاعات مربوط به آن موجودیتها را برمیگرداند. این کار با متد analyze_entities انجام میشود که یک AnalyzeEntitiesResponse را برمیگرداند.
کد زیر را در جلسه IPython خود کپی کنید:
from google.cloud import language
def analyze_text_entities(text: str) -> language.AnalyzeEntitiesResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_entities(document=document)
def show_text_entities(response: language.AnalyzeEntitiesResponse):
import pandas as pd
columns = ("name", "type", "salience", "mid", "wikipedia_url")
data = (
(
entity.name,
entity.type_.name,
entity.salience,
entity.metadata.get("mid", ""),
entity.metadata.get("wikipedia_url", ""),
)
for entity in response.entities
)
df = pd.DataFrame(columns=columns, data=data)
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
انجام یک تحلیل:
# Input
text = """Guido van Rossum is best known as the creator of Python,
which he named after the Monty Python comedy troupe.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_entities_response = analyze_text_entities(text)
# Show the results
show_text_entities(analyze_entities_response)
شما باید خروجی مانند زیر را ببینید:
name | type | salience | mid | wikipedia_url ------------------+--------------+------------+-----------+------------------------------------------------------------- Guido van Rossum | PERSON | 50% | /m/01h05c | https://en.wikipedia.org/wiki/Guido_van_Rossum Python | ORGANIZATION | 38% | /m/05z1_ | https://en.wikipedia.org/wiki/Python_(programming_language) creator | PERSON | 5% | | Monty Python | PERSON | 3% | /m/04sd0 | https://en.wikipedia.org/wiki/Monty_Python comedy troupe | PERSON | 2% | | Haarlem | LOCATION | 1% | /m/0h095 | https://en.wikipedia.org/wiki/Haarlem Netherlands | LOCATION | 1% | /m/059j2 | https://en.wikipedia.org/wiki/Netherlands
لحظهای وقت بگذارید و جملات خودتان را که به موجودیتهای دیگر اشاره میکنند، آزمایش کنید.
خلاصه
در این مرحله، شما توانستید تجزیه و تحلیل موجودیت را انجام دهید!
۶. تحلیل نحوی
تحلیل نحوی، اطلاعات زبانی را استخراج میکند، متن داده شده را به مجموعهای از جملات و توکنها (عموماً بر اساس مرزهای کلمات) تجزیه میکند و تحلیلهای بیشتری را روی آن توکنها ارائه میدهد. این کار با متد analyze_syntax انجام میشود که یک AnalyzeSyntaxResponse را برمیگرداند.
کد زیر را در جلسه IPython خود کپی کنید:
from typing import Optional
from google.cloud import language
def analyze_text_syntax(text: str) -> language.AnalyzeSyntaxResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_syntax(document=document)
def get_token_info(token: Optional[language.Token]) -> list[str]:
parts = [
"tag",
"aspect",
"case",
"form",
"gender",
"mood",
"number",
"person",
"proper",
"reciprocity",
"tense",
"voice",
]
if not token:
return ["token", "lemma"] + parts
text = token.text.content
lemma = token.lemma if token.lemma != token.text.content else ""
info = [text, lemma]
for part in parts:
pos = token.part_of_speech
info.append(getattr(pos, part).name if part in pos else "")
return info
def show_text_syntax(response: language.AnalyzeSyntaxResponse):
import pandas as pd
tokens = len(response.tokens)
sentences = len(response.sentences)
columns = get_token_info(None)
data = (get_token_info(token) for token in response.tokens)
df = pd.DataFrame(columns=columns, data=data)
# Remove empty columns
empty_columns = [col for col in df if df[col].eq("").all()]
df.drop(empty_columns, axis=1, inplace=True)
print(f"Analyzed {tokens} token(s) from {sentences} sentence(s):")
print(df.to_markdown(index=False, tablefmt="presto"))
انجام یک تحلیل:
# Input
text = """Guido van Rossum is best known as the creator of Python.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_syntax_response = analyze_text_syntax(text)
# Show the results
show_text_syntax(analyze_syntax_response)
شما باید خروجی مانند زیر را ببینید:
Analyzed 20 token(s) from 2 sentence(s): token | lemma | tag | case | gender | mood | number | person | proper | tense | voice -------------+---------+-------+------------+-----------+------------+----------+----------+----------+---------+--------- Guido | | NOUN | | | | SINGULAR | | PROPER | | van | | NOUN | | | | SINGULAR | | PROPER | | Rossum | | NOUN | | | | SINGULAR | | PROPER | | is | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PRESENT | best | well | ADV | | | | | | | | known | know | VERB | | | | | | | PAST | as | | ADP | | | | | | | | the | | DET | | | | | | | | creator | | NOUN | | | | SINGULAR | | | | of | | ADP | | | | | | | | Python | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | | He | | PRON | NOMINATIVE | MASCULINE | | SINGULAR | THIRD | | | was | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PAST | born | bear | VERB | | | | | | | PAST | PASSIVE in | | ADP | | | | | | | | Haarlem | | NOUN | | | | SINGULAR | | PROPER | | , | | PUNCT | | | | | | | | Netherlands | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | |
لحظهای وقت بگذارید و جملات خودتان را با ساختارهای نحوی دیگر آزمایش کنید.
اگر عمیقتر به بینشهای پاسخ بپردازید، روابط بین توکنها را نیز خواهید یافت. در اینجا یک تفسیر بصری وجود دارد که تجزیه و تحلیل کامل نحو را برای این مثال نشان میدهد، تصویری از نسخه آزمایشی آنلاین زبان طبیعی :

خلاصه
در این مرحله، شما توانستید تحلیل نحوی (syntax analysis) را انجام دهید!
۷. طبقهبندی محتوا
طبقهبندی محتوا، یک سند را تجزیه و تحلیل میکند و فهرستی از دستهبندیهای محتوا را که به متن موجود در سند مربوط میشوند، برمیگرداند. این کار با متد classify_text انجام میشود که یک ClassifyTextResponse برمیگرداند.
کد زیر را در جلسه IPython خود کپی کنید:
from google.cloud import language
def classify_text(text: str) -> language.ClassifyTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.classify_text(document=document)
def show_text_classification(text: str, response: language.ClassifyTextResponse):
import pandas as pd
columns = ["category", "confidence"]
data = ((category.name, category.confidence) for category in response.categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
انجام یک تحلیل:
# Input
text = """Python is an interpreted, high-level, general-purpose programming language.
Created by Guido van Rossum and first released in 1991, Python's design philosophy
emphasizes code readability with its notable use of significant whitespace.
"""
# Send a request to the API
classify_text_response = classify_text(text)
# Show the results
show_text_classification(text, classify_text_response)
شما باید خروجی مانند زیر را ببینید:
Text analyzed: Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace. category | confidence --------------------------------------+-------------- /Computers & Electronics/Programming | 99% /Science/Computer Science | 99%
لحظهای وقت بگذارید و جملات خودتان را در رابطه با سایر دستهها آزمایش کنید. توجه داشته باشید که باید یک بلوک متنی (سند) با حداقل بیست نشانه (کلمات و علائم نگارشی) ارائه دهید.
خلاصه
در این مرحله، شما توانستید طبقه بندی محتوا را انجام دهید!
۸. نظارت بر متن
با استفاده از جدیدترین مدل پایه PaLM 2 گوگل، مدیریت متن طیف گستردهای از محتوای مضر، از جمله سخنان نفرتپراکن، قلدری و آزار جنسی را شناسایی میکند. این کار با متد moderate_text انجام میشود که یک ModerateTextResponse برمیگرداند.
کد زیر را در جلسه IPython خود کپی کنید:
from google.cloud import language
def moderate_text(text: str) -> language.ModerateTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.moderate_text(document=document)
def show_text_moderation(text: str, response: language.ModerateTextResponse):
import pandas as pd
def confidence(category: language.ClassificationCategory) -> float:
return category.confidence
columns = ["category", "confidence"]
categories = sorted(response.moderation_categories, key=confidence, reverse=True)
data = ((category.name, category.confidence) for category in categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
انجام یک تحلیل:
# Input
text = """I have to read Ulysses by James Joyce.
I'm a little over halfway through and I hate it.
What a pile of garbage!
"""
# Send a request to the API
response = moderate_text(text)
# Show the results
show_text_moderation(text, response)
شما باید خروجی مانند زیر را ببینید:
Text analyzed: I have to read Ulysses by James Joyce. I'm a little over halfway through and I hate it. What a pile of garbage! category | confidence -----------------------+-------------- Toxic | 67% Insult | 58% Profanity | 53% Violent | 48% Illicit Drugs | 29% Religion & Belief | 27% Politics | 22% Death, Harm & Tragedy | 21% Finance | 18% Derogatory | 14% Firearms & Weapons | 11% Health | 10% Legal | 10% War & Conflict | 7% Public Safety | 5% Sexual | 4%
لحظهای وقت بگذارید و جملات خودتان را آزمایش کنید.
خلاصه
در این مرحله، شما توانستید مدیریت متن را انجام دهید!
۹. تبریک میگویم!

شما یاد گرفتید که چگونه از API زبان طبیعی با استفاده از پایتون استفاده کنید!
تمیز کردن
برای پاکسازی محیط توسعه خود، از Cloud Shell:
- اگر هنوز در جلسه IPython خود هستید، به پوسته برگردید:
exit - استفاده از محیط مجازی پایتون را متوقف کنید:
deactivate - پوشه محیط مجازی خود را حذف کنید:
cd ~ ; rm -rf ./venv-language
برای حذف پروژه Google Cloud خود، از Cloud Shell:
- شناسه پروژه فعلی خود را بازیابی کنید:
PROJECT_ID=$(gcloud config get-value core/project) - مطمئن شوید که این پروژهای است که میخواهید حذف کنید:
echo $PROJECT_ID - حذف پروژه:
gcloud projects delete $PROJECT_ID
بیشتر بدانید
- نسخه آزمایشی را در مرورگر خود آزمایش کنید: https://cloud.google.com/natural-language#natural-language-api-demo
- مستندات زبان طبیعی: https://cloud.google.com/natural-language/docs
- پایتون در گوگل کلود: https://cloud.google.com/python
- کتابخانههای کلاینت ابری برای پایتون: https://github.com/googleapis/google-cloud-python
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.