【问题标题】:Parsing text in python with BeautifulSoup使用 BeautifulSoup 在 python 中解析文本
【发布时间】:2017-08-01 16:21:35
【问题描述】:

我正在使用来自 kaggle 的安然电子邮件数据。 https://www.kaggle.com/wcukierski/enron-email-dataset 我正在阅读 emails.csv 文件。我正在使用 BeautifulSoup 来解析消息列。

import pandas as pd
train = pd.read_csv( "C:\Users\JAYASHREE\Documents\NLP\enron-email-dataset (1)\emails.csv")
from bs4 import BeautifulSoup
message=train["message"]
message[0]
soup = BeautifulSoup(message[0],"lxml")
message=soup.body.p
print message

beautifulsoup 解析的第一行输出如下输出

<p>Message-ID: &lt;18782981.1075855378110.JavaMail.evans@thyme&gt;
Date: Mon, 14 May 2001 16:39:00 -0700 (PDT)
From: phillip.allen@enron.com
To: tim.belden@enron.com
Subject: 
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-From: Phillip K Allen
X-To: Tim Belden <tim belden="">
X-cc: 
X-bcc: 
X-Folder: \Phillip_Allen_Jan2002_1\Allen, Phillip K.\'Sent Mail
X-Origin: Allen-P
X-FileName: pallen (Non-Privileged).pst

Here is our forecast

 </tim></p>

我只需要提取这一行 这是我们的预测

X-FileName 后面的行

如何解析文本并检索特定部分。

【问题讨论】:

  • 我会使用正则表达式来提取感兴趣的部分。

标签: python beautifulsoup


【解决方案1】:

由于您需要来自 p 标记内的文本中的数据,该文本采用某种特定格式,因此请使用正则表达式模块

import re  
text = re.findall(r'X-FileName.*\n+(.*)',soup.body.p.getText())  

正则表达式捕获 r'X-FileName.*\n+(.*)' 搜索以 X-FileName 开头的行,后跟一行或新行,(.*) 捕获您想要在结果中出现的行。 这将导致输出

 >>>print(text)  
 ['Here is our forecast'] 

要捕获直到&lt;/p&gt; 标记的多行输出,请使用此正则表达式。这里我们的策略是收集 X-FileName 行之后的所有行。所以我们正在考虑整个 p 标签,而不仅仅是 p 标签内的文本。

text = re.findall('X-FileName[^\n]*(.*)?<\/p>',soup.body.p,re.DOTALL) 

【讨论】:

  • 嗨@Rajan Chauhan,感谢您的帮助。上面的代码适用于单行。但是如果消息跨越多行怎么办。 X-FileName: pallen.nsf Buckner 先生,对于圣地亚哥背后的天然气输送,安然能源服务公司是合适的安然实体。我已将您的请求转发给 EES 的 Zarin Imam。她的电话号码是 713-853-7107。 这里只解析了Mr.Bucker字符串。如果需要提取X-FileName后面的整个字符串怎么办:
  • @Jayashree 见上文我已添加多行支持
  • 当我使用多行语法时,我得到的是空列表。但是当我删除 p 标签时,我得到了想要的结果。text = re.findall('X-FileName[^\n]*(. *)?',soup.body.p.getText(),re.DOTALL)。你能解释一下代码吗?谢谢
  • @Jayshree 看看这个
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多