Вам потрібно знайти відповідні слова чи фрази в сотнях чи тисячах текстів? І ви хочете це зробити іспанською? Якщо так, ця стаття може трохи допомогти вам це зробити.

іспанських

Для цього ми будемо використовувати деякі методи обробки природної мови, щоб шукати - і, сподіваємось, знаходити - деякі відповідні терміни з одного або декількох документів.

Перед початком роботи я зроблю два уточнення. Перший, що мій підхід буде мовно орієнтованим. Це означає, що я надаватиму більшу вагу результатам, ніж комп'ютерним технікам, і тому я намагатимусь використовувати більш розумні стратегії з точки зору спілкування, ніж інші, які є більш ефективними в обчислювальному плані. Секунда Точність полягає в тому, що відповідні терміни є питанням щодо тексту та мети, яку ми маємо, як це стане зрозумілим - сподіваюся - пізніше.

Якщо, навпаки, вас не цікавить витяг відповідних слів, але ви прагнете зменшити кількість слів у тексті, я запрошую вас переглянути ще одну мою статтю: Зменшіть кількість слів у текст: стемінг та радикалізація (стемінг) за допомогою python.

Щоб знайти відповідні терміни в тексті, ми спиратимемось на граматичний аналіз речень, що його складають. Є два способи скористатися структурою речення: побачити, які слова розташовані поруч один з одним, щоб утворити дедалі ширші речення (аналіз у складових), або спостерігати, як одні слова вимагають або є підтримкою інших (аналіз залежностей ).

У цій статті ми будемо використовувати другий тип аналізу, оскільки він робить більш прозорим, які слова є важливими, а які ні. І оскільки це також допомагає знайти відповідні слова, які працюють як одна група (корисність цього ви побачите пізніше).

Ми збираємося виконати це завдання з бібліотекою, майже свіжою з духовки: StanfordNLP.

StanfordNLP - це пакет аналізу природної мови, створений на Python. Він ідеально підходить для поділу тексту на речення та слова, а також для класифікації цих слів за такими категоріями, як іменники, прикметники тощо. Це також дозволяє проводити аналіз залежності більш ніж на 70 різних мовах.

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

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

Встановлення бібліотеки

Бібліотека StanfordNLP знаходиться в каталозі PyPI, тому ми можемо встановити її за допомогою pip з терміналу:

$ pip встановити stanfordnlp

Ця бібліотека також вимагає завантаження мовних моделей, з якими ви збираєтесь працювати. Список цих моделей ви можете знайти на офіційній сторінці проекту.

Встановлення мовних моделей

Почнемо з імпорту бібліотеки та завантаження моделей для іспанської з консолі Python:

Я рекомендую завантажити файли моделі за замовчуванням, що полегшить і читає код. Вам потрібно зробити це завантаження іспанських моделей лише один раз. Потім моделі встановлюються на ваш комп’ютер.

Налаштування послідовності компонентів StanfordNLP

StanfordNLP використовує кілька компонентів послідовно для обробки мовного введення. Ця послідовність компонентів (або конвеєр) робить бібліотеку розширюваною, гнучкою та масштабованою. Таким чином, ми можемо використовувати лише ті компоненти, які необхідні для виконання завдання, або можемо замінити один на більш підходящий. StanfordNLP вимагає, щоб ми передали як аргумент лінгвістичну модель, яку ми збираємось використовувати (у цьому випадку lang = 'is', яка була моделлю, яку ми встановили трохи раніше).

Якщо ми виконаємо послідовність компонентів за замовчуванням, ми можемо отримати уявлення про те, що може робити ця бібліотека:

Компонентами за замовчуванням є такі:

  • токенізувати: Маркер. Розділіть текст на речення, а речення на слова.
  • МВт: Складний словесний маркер. Розпізнавати такі слова, як подальші дії або віртуальний помічник.
  • поз: Класифікатор класу Word. Призначте слову такі категорії, як прикметник або дієслово.
  • лема: Лематизатор. Він бере слово і перетворює його у форму словника. Наприклад, визнайте, що словникова форма, яку ми співали, - співати.
  • депарсе: Аналізатор залежностей. Вкажіть на функцію слова та вкажіть його зв’язок з іншими словами в тому самому реченні. Наприклад, ви можете вказати, що у реченні «Я люблю шоколад» словосполучення «шоколад» - це предмет, який любить людина, що говорить.

Якщо ми не хочемо використовувати всі компоненти, ми можемо вказати, які нам потрібні, наступним чином:

У будь-якому випадку, я пропоную для початку використовувати компоненти за замовчуванням. Це полегшить вам наслідування прикладів у цій статті на вашому комп’ютері.

Ми збираємось перевірити бібліотеку на простому прикладі. Для цього ми збираємося створити об’єкт класу Document від об'єкта nlp (класу Pipeline), які ми побудували раніше. Цей об'єкт doc зберігатиме результати аналізу, зробленого nlp.

За допомогою цих кількох рядків ми обробили рядок, складений із пари речень. Об’єкт - це список речень, з яких складається рядок. Якщо ви новачок у Python або програмуванні загалом, все це означає, що вся наша проаналізована рядок зберігається у документі, і що за допомогою відповідних методів ми можемо отримати доступ до всієї цієї інформації.

Наприклад, я бачу залежності першого речення (того, що знаходиться у позиції 0 - перша позиція - у Python), наприклад:

  • ("Кішки", "4", "nsubj")
  • ("Був", "4", "поліцейський")
  • ("Один", "4", "дет")
  • ("Фільм", "0", "корінь")
  • ("Дійсно", "6", "advmod")
  • ("Жахливо", "4", "амод")
  • (".", "4", "пункту")

Що все це означає? Він описує те, що відбувається в цьому реченні, вказуючи цифрою слово, від якого залежить інше, і повідомляючи нам функціональний клас слова. Наприклад, для цього прикладу ми могли б “перекласти" наступний:

  • ("Кішки", я залежать від слова 4, і це те, за кого я відповідаю за те, що я буду говорити, тому що я Суб'єкт)
  • ("Був", я залежа від слова 4, і я сполучувальне дієслово - я тут лише для того, щоб скласти речі -)
  • ("Один", я залежа від слова 4, і я визначаю - тому не звертайте на мене занадто багато уваги -)
  • («Фільм», я тут найголовніше слово, і я ні від кого не залежаю - мені 0 -, і я є коренем або стрижнем цього речення)
  • («Дійсно», я залежа від слова 6 - «від жахливого» - і я є модифікуючим прислівником)
  • ("Жахливо", я залежа від слова 4, і я є прикметником, який модифікує це слово)
  • («.», Я залежать від 4, і я є точкою - ніхто насправді не піклується про мене -)

Ці відносини також можна побачити на наступному графіку:

Ядро речення - це слово, навколо якого прямо чи опосередковано обертаються всі інші (зауважте, що всі шляхи на цьому закінчуються). Ядра доповнюють своє значення предметами: сутності (як правило, іменники), які активно або пасивно беруть участь у діях або які доповнюють семантику іншого слова.

У цьому прикладі слово «фільм» саме по собі нічого не говорить. Це починає мати сенс, коли воно знаходиться поруч із об’єктом, в даному випадку з Котами. Ми називаємо цей об'єкт, який визначається суб'єктом фільму (англійською мовою). Але ми не можемо сказати іспанською мовою "Кішки", але ми позначаємо зв'язок між ядром і об'єктом у цьому реченні дієсловом: "Кішки" - це фільм. Сенс остаточно завершується, коли ми додаємо до нього модифікатор (Кішки були жахливим фільмом). І, нарешті, до цього жахливого ми додаємо ще один модифікатор, в даному випадку необов’язковий, який вказує, наскільки ми впевнені в страшному: кажучи справді жахливим, ми говоримо, що ми дуже впевнені у своїй думці про фільм.

Графік показує, що нас насправді цікавлять ядра, об’єкти та модифікатори. Решту ми можемо відкинути у цьому прикладі, оскільки вони не дуже важливі в даному конкретному випадку.

Зверніть увагу, що тут можна виділити два рівні. Перший пов’язаний з чимось більш технічним і полягає у використанні StanfordNLP для аналізу залежностей (синтаксичного аналізу залежностей) тексту. Другий рівень пов’язаний з нашим тлумаченням важливості категорій, що є результатом аналізу. Якщо ми збираємось шукати відповідні фрази та слова в іспанських текстах, нам доведеться вирішити, який тип тексту нас цікавить найбільше: якщо ядра, об’єкти, модифікатори певного типу чи інші. І я наголошую на типі тексту, оскільки кожен із них буде припускати, що існують деякі класи слів, важливіші за інші. Наприклад, при аналізі настроїв найбільш показовими є модифікатори. Але якщо ви працюєте з твітами, можливо, вам доведеться витягти об’єкти та ядра. Кожен тип тексту та кожна наша мета впливатимуть на те, що нам слід шукати.

Давайте подивимося, як це працює з довшим текстом.

Щоб трохи глибше заглибитися в цю тему, ми використаємо фрагмент з огляду Хеллоуїна II Роба Зомбі як текст. Цей сегмент надано порталом Espinof.

Чи можемо ми швидко знайти найбільш відповідні фрази в цих абзацах? Звичайно так. Нам залишається вирішити, що шукати, і написати кілька рядків коду. Оскільки це огляд, нас цікавить думка автора про фільм: якщо він видався хорошим, нудним тощо.

Як правило, в огляді цього типу ця інформація повинна знаходитися опосередковано при оцінці різних аспектів фільму: якщо такий актор був прийнятним, що якщо сюжет не має сенсу, що якщо фотографія була красиво ... Тож давайте шукати модифікатори та модифіковані об’єкти (сам модифікатор не скаже нам, який елемент фільму оцінюється).

За допомогою цього коду ми отримуємо такий результат:

  • бурхливе повернення
  • вібраційний імпульс
  • змова
  • все передбачувано
  • третя секунда
  • Паралельний монтаж
  • затримка повернення
  • Передбачувана нудна
  • м'яке повторення
  • творчі сцени
  • подвійна гра
  • очевидний недолік
  • смішний звичайний
  • ангельська мати
  • білий кінь
  • надмірна популярність
  • незручна присутність
  • остаточна розтяжка
  • тривале повернення
  • початковий блиск
  • чудова можливість

Деякі з цих речей позитивні, інші негативні, а деякі просто нейтральні. Але ми знайшли кілька досить описових фраз: нахабне повернення, приглушений сюжет, все передбачуване, м'який повтор, творчі сцени, початковий блиск. Ці фрази в такому порядку, здається, вказують на те, що фільм розпочинається добре, а потім, пафос, він розвалюється.

Зверніть увагу, що кількома рядками на Python ми можемо виділити відповідну інформацію з тексту. Якщо ми використовуємо цей код у десятках або сотнях оглядів фільму (і в аналізі певного настрою), ми можемо отримати гарне уявлення про те, як критику сприйняли фільм. Все полягає у знанні того, що ми збираємось шукати, та у використанні відповідного інструменту.

Я пояснюю код

Так, код дуже приємний і корисний, але що це означає? Для цього ми збираємось повернутися трохи назад і подивитися, що робить атрибут залежностей кожного речення.

Далі я покажу вам перші два елементи списку, які є результатом залежностей (результати для перших двох слів: Cats and it was).

З атрибутом залежностей відображається список кортежів з трьох елементів: перший показує інформацію про слово, від якого воно залежить (супровідне слово); другий елемент кортежу представляє функціональний клас слова; третій елемент вказує інформацію слова, яке аналізується. Ми можемо отримати доступ до кожного елемента, що утворює один із цих кортежів, з індексом.

Але як отримати слова як такі з усієї цієї інформації? Для цього ми використовуємо атрибут text після вибору першого та третього елемента кортежу (індекси 0 та 2 відповідно).

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

StanfordNLP - це проста бібліотека, але повна можливостей. У своїй простоті він приховує багато можливостей для обробки природної мови. Максимальна його користь не передбачає годин читання документації, а заздалегідь продумування того, що нас цікавить у текстах, і трохи розмірковування про те, як ми досягаємо своїх цілей, користуючись граматичними категоріями, які вона нам надає.

Якщо вам цікаво детальніше вивчити цю тему, ви можете звернутися до зошита Юпітера, який я для цього підготував тут. Вам не потрібно нічого встановлювати, оскільки це зроблено за допомогою чудового інструменту для онлайн-співпраці під назвою Google Colab. Ви можете зробити копію цього зошита і вчитися, граючи з кодом, який я вам там представляю.