Вопрос или проблема
Краткое введение:
У меня есть отчет/абзац, в котором есть предложения, ссылающиеся на будущие планы/перспективы/ожидания для конкретного субъекта. Я хочу извлечь все такие предложения на данный момент.
Проблема:
Как идентифицировать или распознать такие футуристические утверждения (предложения, в которых они ссылаются на свои планы) или как лучше всего отделить футуристические предложения от других нефутуристических предложений. Я ищу традиционное решение программирования и/или решение на основе машинного обучения.
Предпочитаемые языки и пакеты: 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 и его низкоуровневые библиотеки.
Ключевые аспекты для идентификации футуристических предложений
-
Анализ временных форм глаголов:
- Футуристические предложения часто содержат глаголы в форме будущего времени (например, "будем делать", "планируем").
- Мы также можем обратить внимание на использование модальных глаголов, таких как "will", "shall", "intend to", "aim to", которые сигнализируют о намерении что-то сделать в будущем.
-
Лексическая составляющая:
- Некоторые слова и фразы явно указывают на будущее, например, "планируем", "намереваемся", "в будущем", "ожидаем".
- Это может быть осуществлено анализом контекста предложения и идентификацией ключевых слов.
-
Контекст:
- Кроме грамматики и лексики, важно обратить внимание на общую смысловую нагрузку предложения. Даже без использования будущего времени предложение может указывать на намерение или планы (например, "мы стремимся улучшить…").
Подходы к решению задачи
Традиционное программирование с использованием 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.
-
Сбор данных: Необходимо собрать размеченные примеры предложений, чтобы тренировать модель.
-
Предобработка текстов: Примените TF-IDF или другие способы представления текста в векторе.
-
Настройка модели: Используйте Logistic Regression, Random Forest или любую другую подходящую модель для классификации.
-
Оценка модели: Определите точность на тестовых данных, и при необходимости произведите отладку.
Заключение
Независимо от подхода, который вы выберете, эффективная идентификация футуристических предложений требует внимательного анализа как лексики, так и структуры предложения. Использование Python и его библиотек, таких как SpaCy и scikit-learn, позволит вам реализовать мощное решение для этой задачи. Начинайте с простого анализа, а затем переходите к более сложным подходам.