#python-3.x #pandas
Вопрос:
Я извлекаю информацию о химических элементах из Википедии. Он содержит предложения, и я хочу, чтобы каждое предложение было добавлено следующим образом:
Молекула | Приговор1 | Приговор 1 и приговор 2 | All_sentence |
---|---|---|---|
MgO | это s1. | это s1. это s2. | all_sentence |
ЦаО | это s1. | это s1. это s2. | all_sentence |
Чего я достиг до сих пор
import spacy import pandas as pd import wikipediaapi import csv wiki_wiki = wikipediaapi.Wikipedia('en') chemical = input("Write the name of molecule: ") page_py = wiki_wiki.page(chemical) sumary = page_py.summary[0:] nlp = spacy.load('en_core_web_sm') text_sentences = nlp(sumary) sent_list = [] for sentence in text_sentences.sents: sent_list.append(sentence.text) #print(sent_list) df = pd.DataFrame( {'Molecule': chemical, 'Description': sent_list}) print(df.head())
Результат выглядит следующим образом:
Молекула | Описание |
---|---|
MgO | Все предложения здесь |
Mgo |
Столбцы молекул отображаются повторно для каждой неправильной строки предложения. Пожалуйста, предложите какое-нибудь решение
Ответ №1:
Непонятно, почему вы хотите повторить все предложения в каждой колонке, но вы можете перейти к нужной форме с помощью pivot
:
import spacy import pandas as pd import wikipediaapi import csv wiki_wiki = wikipediaapi.Wikipedia('en') chemical = input("Write the name of molecule: ") page_py = wiki_wiki.page(chemical) sumary = page_py.summary[0:] nlp = spacy.load('en_core_web_sm') sent_list = [sent.text for sent in nlp(sumary).sents] #cumul_sent_list = [' '.join(sent_list[:i]) for i in range(1, len(sent_list) 1)] # uncomment to cumulate sentences in columns df = pd.DataFrame( {'Molecule': chemical, 'Description': sent_list}) # replace sent_list with cumul_sent_list if cumulating df["Sentences"] = pd.Series([f"Sentence{i 1}" for i in range(len(df))]) # replace "Sentence{i 1}" with "Sentence1-{i 1}" if cumulating df = df.pivot(index="Molecule", columns="Sentences", values="Description") print(df)
sent_list
может быть создан с использованием понимания списка. Создайте cumul_sent_list
, если вы хотите, чтобы ваши предложения повторялись в столбцах.
Выход:
Sentences Sentence1 ... Sentence9 Molecule ... MgO Magnesium oxide (MgO), or magnesia, is a white... ... According to evolutionary crystal structure pr...
Комментарии:
1. это дает мне эту ошибку » или магнезия, это белый цвет… [1 строка x 8 столбцов]Исключение игнорируется в: lt;функция Wikipedia.__del__ в 0x7f5ef530bb80gt;Обратная трассировка (последний последний вызов): Файл «/anaconda3/envs/wiki-env/lib/python3.8/site-packages/wikipediaapi/__init__.py», строка 170, в файле __del__»/ana/envs/wiki/lib/python3.8/site-packages/requests/sessions.py», строка 747, рядом envs/lib/python3.8/site-packages/urllib3/poolmanager.py»packages/urllib3/_collections.py», строка 95, в clearTypeError: объект ‘NoneType’ не может быть вызван
2. Проблема , похоже
wikipediaapi
, в том, есть ли у вас другой запущенный экземпляр?3. В случае
MgO
вывода должно быть [1 строка х 10 столбцов]4. да, но я хочу, чтобы в первом столбце было показано первое предложение, во втором столбце s1 s2 и в 3-м столбце-все выходные данные. Я не знаю, как это сделать. вы можете создавать столбцы в зависимости от количества предложений. но мне нужны только три столбца для первого предложения, первого и второго предложения и, наконец, все предложения в последней колонке.
5. Затем определите
cumul_sent_list = [sent_list[0], ' '.join(sent_list[:2]), ' '.join(sent_list)]
и отрегулируйтеdf["Sentences"]
в соответствии с ожидаемыми столбцами