Как определить/узнать, что предложение касается будущего?

Вопрос или проблема

Краткое введение:
У меня есть отчет/абзац, в котором есть предложения, ссылающиеся на будущие планы/перспективы/ожидания для конкретного субъекта. Я хочу извлечь все такие предложения на данный момент.

Проблема:
Как идентифицировать или распознать такие футуристические утверждения (предложения, в которых они ссылаются на свои планы) или как лучше всего отделить футуристические предложения от других нефутуристических предложений. Я ищу традиционное решение программирования и/или решение на основе машинного обучения.

Предпочитаемые языки и пакеты: Python, Spacy, scikit-learn, keras (бэкенд – tensorflow)

Вот входной абзац:


“На дату, когда это было возможно, у нас есть семь линий погружения, расположенных в наших малайзийских учреждениях, и две линии погружения в нашем тайском учреждении. Мы планируем модернизировать наши объекты в Малайзии, увеличив количество чистых помещений для стирки и упаковки нашей продукции, а также установив дополнительное оборудование и установки чистых помещений. В отношении нашего тайского дочернего предприятия мы намерены установить дополнительную линию погружения, увеличить количество чистых помещений и модернизировать наши объекты, добавив дополнительную площадь для размещения дополнительного оборудования и установок.”

Скопируйте вышеуказанный текст в файл paragraph.txt.

Вот код, чтобы получить данный текст в предложения в датафрейме pandas.


import pandas 
import spacy 

with open("paragraph.txt",'r') as f:
    content = f.read() 

nlp = spacy.load('en_core_web_sm')
sentences = list(nlp(content).sents)
sentences = [str(sentence) for sentence in sentences]
sentences_dataframe = pandas.DataFrame(sentences,columns =["Предложения"])
sentences_dataframe["F/NF"] = ""
sentences_dataframe.head()

Вот желаемый результат:

Предложения F/NF
1 На дату, когда это было возможно, у нас есть семь линий погружения, расположенных в наших малайзийских учреждениях, и две линии погружения в нашем тайском учреждении. NF
2 Мы планируем модернизировать наши объекты в Малайзии, увеличив количество чистых помещений для стирки и упаковки нашей продукции и установив дополнительное оборудование и установки чистых помещений. F
3 В отношении нашего тайского дочернего предприятия мы намерены установить дополнительную линию погружения, увеличить количество чистых помещений и модернизировать наши объекты, добавив дополнительную площадь для размещения дополнительного оборудования и установок. F

F – Футуристический, NF – Нефутуристический

Абзац содержит 3 предложения, одна строка для каждого предложения и связанные теги для каждого предложения.

import spacy
nlp = spacy.load('en_core_web_trf')

def identify_futuristic(sentence):
    sentence_doc = nlp(sentence)
    if any((token.morph.get('Tense') == [] and
            token.morph.get('VerbForm') == ['Fin'] and 
            token.morph.get('Mood') == [])
           or
           (token.morph.get('Tense') == ['Pres'] and
            token.morph.get('VerbForm') == ['Fin'] and
            token.morph.get('Mood') != ['Ind'])
           for token in sentence_doc):

        return 'F'
    else:
        return 'NF'

sentences_dataframe["F/NF"] = sentences_dataframe['Предложения'].apply(
    lambda s: identify_futuristic(s))

Ответ или решение

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

Ключевые аспекты для идентификации футуристических предложений

  1. Анализ временных форм глаголов:

    • Футуристические предложения часто содержат глаголы в форме будущего времени (например, "будем делать", "планируем").
    • Мы также можем обратить внимание на использование модальных глаголов, таких как "will", "shall", "intend to", "aim to", которые сигнализируют о намерении что-то сделать в будущем.
  2. Лексическая составляющая:

    • Некоторые слова и фразы явно указывают на будущее, например, "планируем", "намереваемся", "в будущем", "ожидаем".
    • Это может быть осуществлено анализом контекста предложения и идентификацией ключевых слов.
  3. Контекст:

    • Кроме грамматики и лексики, важно обратить внимание на общую смысловую нагрузку предложения. Даже без использования будущего времени предложение может указывать на намерение или планы (например, "мы стремимся улучшить…").

Подходы к решению задачи

Традиционное программирование с использованием Python и библиотеки SpaCy

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

import pandas as pd
import spacy

# Загрузка модели SpaCy
nlp = spacy.load('en_core_web_sm')

# Функция для определения футуристичности предложения
def identify_futuristic(sentence):
    sentence_doc = nlp(sentence)

    # Проверка наличия футуристических маркеров
    is_futuristic = any("планируем" in token.lemma_ or 
                        "намереваемся" in token.lemma_ or
                        token.tag_ in ["MD", "VBZ"]  # Применительно к английскому
                        for token in sentence_doc)

    return 'F' if is_futuristic else 'NF'

# Чтение данных
with open("paragraph.txt", 'r') as f:
    content = f.read()

sentences = list(nlp(content).sents)
sentences_df = pd.DataFrame(sentences, columns=["Sentences"])

# Применение функции к датафрейму
sentences_df["F/NF"] = sentences_df["Sentences"].apply(identify_futuristic)

print(sentences_df)

Подход на основе машинного обучения

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

  1. Сбор данных: Необходимо собрать размеченные примеры предложений, чтобы тренировать модель.

  2. Предобработка текстов: Примените TF-IDF или другие способы представления текста в векторе.

  3. Настройка модели: Используйте Logistic Regression, Random Forest или любую другую подходящую модель для классификации.

  4. Оценка модели: Определите точность на тестовых данных, и при необходимости произведите отладку.

Заключение

Независимо от подхода, который вы выберете, эффективная идентификация футуристических предложений требует внимательного анализа как лексики, так и структуры предложения. Использование Python и его библиотек, таких как SpaCy и scikit-learn, позволит вам реализовать мощное решение для этой задачи. Начинайте с простого анализа, а затем переходите к более сложным подходам.

Оцените материал
Добавить комментарий

Капча загружается...