Как очистить данные, которые имеют математические обозначения, созданные HTML и получить его точно в текстовом формате? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь извлечь текст из HTML, используя Beautifulsoup.HTML-код в формате ниже.код использует математические теги для генерации текста.

"" "

<p>

 <span class="aps-inline-formula">
  <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML">
   <mrow>
    <msub>
     <mi mathvariant="normal">
      Pt
     </mi>
     <mrow>
      <mo>
       (
      </mo>
      <mn>
       1
      </mn>
      <mo>
       −
      </mo>
      <mi>
       x
      </mi>
      <mo>
       )
      </mo>
     </mrow>
    </msub>
    <msub>
     <mi mathvariant="normal">
      Ru
     </mi>
     <mi>
      x
     </mi>
    </msub>
   </mrow>
  </math>
 </span>
 alloys in the presence of adsorbing oxygen. 
</p>

" "" Этот html генерирует математическую формулу в браузере (как показано ниже)

"Этот метод применяется для упорядочения поверхностии сегрегация на (111) поверхности сплавов Pt (1 - x) Ru x в присутствии адсорбирующего кислорода "

Я хочу сохранить форматирование, поскольку оно приводит к получению данных в текстовый формат с использованием Python.Пожалуйста, предоставьте мне несколько предложений.

1 Ответ

0 голосов
/ 21 декабря 2018

Я не вижу «Метод применяется к упорядочению поверхности и сегрегации на поверхности (111)» в html.Но учитывая то, что здесь, вы можете хранить HTML в виде строки.

, который даст вывод:

>>> print (text)
Out[36]: '\n\n\n\n\n\n      Pt\n     \n\n\n       (\n      \n\n       1\n      \n\n       −\n      \n\n       x\n      \n\n       )\n      \n\n\n\n\n      Ru\n     \n\n      x\n     \n\n\n\n\n alloys in the presence of adsorbing oxygen. \n'

Затем используйте регулярное выражение для удаления пробелов и новых строк:

import bs4
import re

html = '''<p>

 <span class="aps-inline-formula">
  <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML">
   <mrow>
    <msub>
     <mi mathvariant="normal">
      Pt
     </mi>
     <mrow>
      <mo>
       (
      </mo>
      <mn>
       1
      </mn>
      <mo>
       −
      </mo>
      <mi>
       x
      </mi>
      <mo>
       )
      </mo>
     </mrow>
    </msub>
    <msub>
     <mi mathvariant="normal">
      Ru
     </mi>
     <mi>
      x
     </mi>
    </msub>
   </mrow>
  </math>
 </span>
 alloys in the presence of adsorbing oxygen. 
</p>'''


soup = bs4.BeautifulSoup(html, 'html.parser')  

text = soup.find('p').text

string =  re.sub('[ \n]+', ' ', text).strip()

Вывод:

>>> print (string)
Pt ( 1 − x ) Ru x alloys in the presence of adsorbing oxygen.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...