파이썬으로 논문 내용을 문자마다 구분지으려고 하는데 어려움이 있습니다

-@Naver의 이미지

이런식의 문장들이 규칙에 맞게 작성되었는데. 문자의 인덱스 번호들로 구분 짓는 것이 아닌 정규표현식이나 다른 방법을 이용해서 이름과 년도 등을 구분할 수 있는 방법이 있을까요?ㅠㅠ

파이썬3의 이미지

2002 | 이름 | 논문제목
2002 | 이름 | 논문제목
2008 | 이름 | 논문제목

이렇게요?

뭘 어떻게 하든 정규표현식은 들어갈수밖에 없네요;;;
그리고 좀 더 자세하게 자세하게 자세하게 더욱더 자세한 정보와 하고자 하는바가 무엇인지를 더 많은 정보를 주셔야 테스트 코드라도 작성해볼 수 있어요~

-@Naver의 이미지

[1] B. Aditya, G. Bhalotia, S. Chakrabarti, A. Hulgeri, C. Nakhe, P. Parag, and S. Sudarshan. Banks: browsing and keyword searching in relational databases. In Proc. VLDB Conf., pages 1083–1086. VLDB Endowment, 2002.

[2] S. Agrawal, S. Chaudhuri, and G. Das. Dbxplorer: A system for keyword-based search over relational databases. In Proc. ICDE Conf., page 5, Washington, DC, USA, 2002. IEEE Computer Society.

[3] S. Basu Roy, H. Wang, G. Das, U. Nambiar, and M. Mohania. Minimum-effort driven dynamic faceted search in structured databases. In Proc. CIKM, pages 13–22, 2008.

이 문장들에서 저자들의 이름, 연도, 논문 제목을 따로 리스트화 해서 추출해내야 합니다
그러기 위해 import re를 하고 정규표현식을 한 후 group()을 활용 하려고 하지만
위와 같은 문장들이 30~40여개 됩니다ㅠㅠ
제가 연도를 추출하기 위해 만든 코드는
import re

text = (리스트에서 추출)

regex = re.compile(r'20\d\d')

matchobj = regex.search(text)

years = matchobj.group()
이렇게 되는데 text에 수많은 문장을 어찌 넣고 그 외에 이름과 논문 제목은 어떻게 추출해야하는 지 막히네요..

파이썬3의 이미지

# -*- coding: utf-8 -*-
 
# [3] 엔 이름과 논문제목 사이에 ":" 대신 "." 이 있어서 전체적으로 규칙성을 부여하기 힘드므로
# 원본자료를 "." 대신 ":" 으로 수정을 했습니다.
kdata = """\
[1] B. Aditya, G. Bhalotia, S. Chakrabarti, A. Hulgeri, C. Nakhe, P. Parag, and S. Sudarshan. Banks: browsing and keyword searching in relational databases. In Proc. VLDB Conf., pages 1083–1086. VLDB Endowment, 2002.
 
[2] S. Agrawal, S. Chaudhuri, and G. Das. Dbxplorer: A system for keyword-based search over relational databases. In Proc. ICDE Conf., page 5, Washington, DC, USA, 2002. IEEE Computer Society.
 
[3] S. Basu Roy, H. Wang, G. Das, U. Nambiar, and M. Mohania: Minimum-effort driven dynamic faceted search in structured databases. In Proc. CIKM, pages 13–22, 2008.
"""
 
import re
 
klines = kdata.split("\n")
 
kname = []
ksubject = []
kyear = []
 
def kname_search(s):
    p = re.search("\].+(?=:)", s)
    kname.append(p.group(0)[2:])
 
def ksubject_search(s):
    p = re.search("(?<=: ).+[a-z][.]", s)
    pp = p.group(0)
    ppp = pp.split(".")[0]
    ksubject.append(ppp)
 
def kyear_search(i):
    p = re.search("19[0-9][0-9]|20[0-9][0-9]", i)
    kyear.append(p.group(0))
 
for line in klines:
    if len(line) != 0:
        kname_search(line)
 
for line in klines:
    if len(line) != 0:
        ksubject_search(line)
 
for line in klines:
    if len(line) != 0:
        kyear_search(line)
 
for x, y, z in zip(kyear, ksubject, kname):
    print(x, "\t", y, "\t", z)
파이썬3의 이미지

우분투 18.04 파이썬 3.6.9 로 테스트를 했씁니다.

댓글 첨부 파일: 
첨부파일 크기
Image icon Screenshot from 2019-12-08 01-35-56.png91.98 KB
-@Naver의 이미지

압도적으로 감사드려요
한가지만 더 질문 드려도 될까요?
Traceback (most recent call last):
File "C:/Users/user/Desktop/3.py", line 37, in
kname_search(line)
File "C:/Users/user/Desktop/3.py", line 23, in kname_search
kname.append(p.group(0)[2:])
AttributeError: 'NoneType' object has no attribute 'group'
>>> 해당 에러는 파이썬 버전에 따른 에러인가요?>

익명 사용자의 이미지

마우스로 긁어붙여넣기하면서 klines[1], klines[3], klines[5] 길이가 0에서 1로 변하면서 그룹을 찾지못한다는 에러가 나타났습니다. 그래서 for문의 조건을 조금 보완했습니다.

일단 확실하게 해두기위하야... RAW 파일을 내려받아서 일단 테스트 해보십시오.
우분투 18.04 파이썬 3.7.5 에서 테스트를 했습니다. 성공.

https://gitlab.com/soyeomul/test/raw/4395aa92762329025bf345044b3993481656f072/162501.py

파이썬3 드림

황병희의 이미지

form = "논문제목: {0} \n 년도: {1} \n 저작자: {2}"
for x, y, z in zip(kyear, ksubject, kname):
    print(form.format(y, x, z))

스크린샷도 함께 첨부합니다.

[우분투 18.04 파여폭스 나비에서 작성했습니다]

댓글 첨부 파일: 
첨부파일 크기
Image icon Screenshot from 2019-12-08 22-32-04.png359.17 KB

--
^고맙습니다 감사합니다_^))//

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.