Как извлечь текст между тегами html из pandas DataFrame в новый столбец? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь извлечь код из текстового корпуса.

У меня сейчас что-то вроде этого

<code>input = pd.DataFrame([[0, "Line 0 some text before <pre> line 0 some code 
строка 0, некоторый текст после "], \ [1," Строка 1, некоторый текст перед
line 1 some code 
строка 1 некоторый текст после "]], столбцы = [" id "," body "]) # result = SomeFunctions (input) result = pd.DataFrame ([[0," строка 0 некоторый текст перед строкой 0 некоторая текст после "," строка 0, некоторый код "], \ [1," строка 0, некоторый текст до строки 1, некоторый текст после "," строка 1, некоторый код "]], columns = [" id "," text "," код "])

(результат, который я хочу получить, SomeFunctions - это то, что мне нужно). Каков наилучший способ сделать это? У меня есть корпус 3Gb, содержащий ~ 1,2 млн записей.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
<code>#Split df['body'] by the whitespace before 
df = input df3 = df.body.str.split ('\ s + (? = \ <\ / [Az] + \>)', expand = True) df3 # Заменить текст между <> ни на что df3 [0] = df3 [0] .str.replace (r '
', '', regex=False)
    df3[1]=df3[1].str.replace(r'
', '', regex = True) # Переименовать столбцы df3.columns = ['text', 'code'] df3
0 голосов
/ 12 апреля 2020

Я подозреваю, что для большого объема текста инструменты Unix самые быстрые. Для вашего примера:

<code>input_ = pd.DataFrame([[0, "Line 0 some text before <pre> line 0 some code 
строка 0 некоторый текст после "], \ [1," строка 1 некоторый текст до
line 1 some code 
строка 1 некоторый текст после "]], columns = [" id "," body " ]) input_.to_csv ('input.csv', header = None)

(Вы не должны называть объекты в Python input, поскольку это зарезервированное имя.)

Затем в вашей оболочке:

sed -n "/<.*>/s/<.*>//p" in.csv > 1.csv
grep -oP "(?<=\>).*(?=<)"  in.csv > 2.csv
# uses -P for perl regex, so needs gnu grep
# on OSX do `brew install grep` and use ggrep instead of grep
paste -d ',' 1.csv 2.csv > result.csv

Затем в Python:

result = pd.read_csv('result.csv', header=None, names=["id", "text", "code"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...