본문 바로가기
파이썬

파이썬 복잡한 텍스트 파일을 구문 분석하는 데 도움이 필요합니다.

by º기록 2020. 9. 14.
반응형

아래와 같은 구조의 텍스트 파일이 있는데, 파이썬을 사용하여 데이터 프레임에서 데이터를 추출하고 싶습니다. Dataframe에는 각 PMID에 대해 Author에 대해 나타나는 모든 텍스트와 함께 PMID가 있어야합니다.

데이터 형식

PMID- 고유 한 8 자리 숫자
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- text (might be multiple lines)
AUTHOR- text(might be multiple lines)

PMID- unique 8digit number
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- text (might be multiple lines)
AUTHOR- 텍스트 (여러 줄일 수 있음)

파이썬에서 시도한 코드는 다음과 같습니다. 모든 PMID를 추출 할 수 있지만 각 PMID에 대해 모든 작성자 텍스트를 첨부하는 논리를 파악할 수 없습니다.

for lines in open('pubmed-cancerbiol.txt','r'):
    if(lines[0:4] == 'PMID'):
        print(lines)

 

해결 방법

 

PMID 를 키로, AUTHOR 를 값으로 사용하여 사전에서 데이터를 수집 할 수 있습니다.

파일로 시작한다고 가정 해 보겠습니다.

from io import StringIO
fo = StringIO(
'''PMID- 12345678
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author1
AUTHOR- author2

PMID- 12345679
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author3
AUTHOR- author4''')
    
# with open(filename, 'r') as fo:

그런 다음 줄을 반복하고 사전을 채 웁니다.

records = dict()
pmid = None
for line in fo.readlines():
    if line.startswith('PMID-'):
        pmid = line.split('-')[-1].strip()
        records[pmid] = []
    elif line.startswith('AUTHOR'):
        records[pmid].append(line.split('-')[-1].strip())

데이터 프레임을 만들 때 df = pd.DataFrame (records) 를 사용하여 각 작성자를 열에 포함하거나 데이터 프레임 생성자에 전달하기 전에 목록을 결합합니다.

df = pd.DataFrame(
    [', '.join(r) for r in records.values()],
    index=records.keys()
)

산출

                         0
12345678  author1, author2
12345679  author3, author4

 

참조 페이지 https://stackoverflow.com/questions/63756468

 

 

반응형

댓글