2009-05-15 1 views
0

텍스트로 변환 할 html 파일이 있습니다. BeautifulSoup을 가지고 놀았으며 지시 사항을 사용하는 방법을 이해하고 html을 제출하고 텍스트를 가져올 수 있습니다.문서 분석에 기반한 텍스트로 변환하기 전에 BeautifulSoup에서 문서를 분할 할 수 있습니까?

그러나 내 파일에는 테이블 구조를 사용하여 서식이 지정된 많은 텍스트가 있습니다. 예를 들어 나는 테이블의 신체 내에서 데이터를 가지고있는 '고전적인 테이블'가 테이블 태그

<table> 
<td> here is some really useful information and there might be other markup tags but 
    this information is really textual in my eyes-I want to preserve it 
</td> 
</table> 

그리고 세트 내에서 TD 태그에있는 텍스트의 단락이있을 수 있습니다.

알고리즘을 테이블에 적용하고 문서를 텍스트로 변환하기 전에 표가 추출되었는지 여부를 결정하는 몇 가지 규칙을 설정하고 싶습니다.

나는 각 테이블에 COLS의 수를 얻기 위해, 예를 들어 내 테이블 -의 특성을 얻는 방법을 알아 낸 :

numbCols=[] 
for table in soup.findAll('table'): 
    rows=[] 
    for row in table.findAll('tr'): 
     columns=0 
     for column in row.findAll('td'): 
      columns+=1 
     rows.append(columns) 
    numbCols.append(rows) 

그래서 난 numbCols에서 작동하고 각 항목의 렌을 사용할 수 있습니다 목록의 각 항목에있는 값 및 목록을 사용하여 테이블의 특성을 분석하고 유지하거나 삭제하려는 항목을 식별합니다.

나는 BeautifulSoup에서이 정보를 사용하여 텍스트를 얻는 우아한 방법을보고 있지 않습니다. 내가 얻으려고하는 것은 numbCols를 분석하여 표 2, 4, 6, & 9. 제외 할 특정 문서의 10 개의 표를 결정한다고 가정 할 때입니다. 따라서 HTML 문서의 일부에는 테이블. 그런 식으로 스프를 분류 할 수 있습니까?

필자가 알아 낸 해결책은 finditer를 사용하여 스팬을 가져온 다음 열린 태그와 닫는 테이블 태그 각각의 위치를 ​​식별 한 다음 numbCols로 범위를 압축하는 것입니다. 그런 다음이 목록을 사용하여 내 문자열 조각을 함께 잘라내어 결합 할 수 있습니다. 이 작업이 끝나면 BeautifulSoup을 사용하여 html을 텍스트로 변환 할 수 있습니다.

나는 BeautifulSoup에서이 모든 작업을 수행 할 수 있어야한다고 확신합니다. 기존 예제에 대한 제안이나 링크는 훌륭합니다. 내 소스 파일이 커질 수 있으며 수천 개를 처리해야한다고 언급해야합니다.

는 대답을하지 않았다 그러나 나는 내가 열 길이 행을 가지고있는 모든 테이블을 삭제하려는 순진 경우에 가정이 물건 을 사랑 가까이

답변

0

남자를 얻고보다 큰 3 내 대답은

for table in soup.findAll('table'): 
    rows=[] 
    for row in table.findAll('tr'): 
     columns=0 
     for column in row.findAll('td'): 
      columns+=1 
      rows.append(columns) 
     if max(rows)>3: 
      table.delete() 

당신은 당신이 루프에서 모든 수준에서 원하는 처리를 할 수있는,이 테스트를 식별하고 오른쪽 예를 테스트 얻을에만 필요합니다.

관련 문제