2013-04-07 3 views
17

파이썬으로 BC 날짜를 광범위하게 처리해야하는 응용 프로그램을 작성하려고합니다 (DB에 저장 및 검색, 계산 수행). 대부분의 날짜는 "2000BC 주변"과 같이 다양한 불확실성이 있습니다.BC 파이썬 날짜 BC

파이썬의 datetime 라이브러리는 1 AD의 날짜 만 처리한다는 것을 알고 있습니다.

지금까지 단 FlexiDate입니다. 다른 옵션이 있습니까?

EDIT : 가장 좋은 방법은 문자열을 기본 데이터 형식으로 String으로 저장하는 것이고 일부는 숫자로 이해할 수있는 사용자 지정 datetime 클래스를 사용하는 것입니다. 대다수의 경우 날짜는 1 년으로 만 구성됩니다. "초기 500BC", "1600BC ~ 1500BC", "1800BC 이전"과 같은 몇 가지 흥미로운 문제가 있습니다.

+9

날짜의 모호한 특성으로 인해 자신의 datetime 클래스를 사용할 수 있습니다. –

+0

@ JoelCornett Yea,하지만 실제 가치의 불확실성은 그 자체로 실제 가치입니다. 따라서 Roger의 데이터에는 datetime의 기능을 수행 할 수있는 모든 모듈 또는 데이터 구조 (http://stackoverflow.com/a/19869864/623735)를 사용해야합니다 (BC 및 timedeltas 처리). Roger의 모호함을 자연어로만 정의 할 수있는 경우 앱의 어딘가에서 모호성을 수량화해야하므로 (그렇지 않으면 문자열로 수량을 기록 할 것입니다) 정서 분석 (자연 언어 처리)이 필요합니다. – hobs

답변

2

재미있는 질문입니다. 그런 클래스가 아직 존재하지 않는 것 같습니다 (re @joel Cornett comment) 몇 년 동안 만 작업한다면 캘린더 날짜가 아닌 정수 처리에 클래스를 단순화 할 수 있습니다. 에 대한 텍스트 설명 (10 BC) 및 정수 값 (-10) 편집과 사전을 사용

http://code.activestate.com/lists/python-list/623672/

+2

귀하가 제공 한 링크와 이미 발견 한 라이브러리를 제외하고이 주제에 대한 답변이 거의 없으므로 답변을 수락했습니다. 나는 내 자신의 구현을 롤링 준비하고있다 ... – Roger

2

천문학 및 우주 항공 엔지니어가 BC 날짜와 연속 타임 라인을 처리해야 :이 봤 , 그래서 그것은 귀하의 검색에 대한 Google 컨텍스트입니다.

AstropyTime 클래스는 사용자에게 (그리고 더 정확하게 그리고 원하는만큼 완벽하게) 작동합니다. pip install astropy 당신은 곧있을 것입니다.

자신 만의 경우에는 Vallado's chapter on dates의 수식을 검토해야합니다. 그레고리오하는 줄리안에서 날짜를 변환하는 데 필요한 애매한 퍼지 요소가 많이 있습니다 등

+0

고마워. 흥미로운 도서관. 그러나, 내 애플 리케이션에서 날짜의 정밀도는 코드가 날짜를 처리하거나 계산하는 방법에 의해 결정되는 것이 아니라 날짜의 역사적인 정확도에 의해 결정됩니다. 예를 들어, "약 10.000BC"의 정확도는 기본 알고리즘에 의해서가 아니라 "약"이라는 단어의 (본질적으로) 주관적 해석에 의해보다 정확해질 수 있습니다. 또 다른 예는 "로마 제국의 부상 중"과 같은 "추천 날짜"라고 불리는 것입니다.이 날짜는 다소간 알려진 시간대를 나타냅니다. 어려운 주제입니다. – Roger

+0

그렇다면 자연 언어 처리 문제는 데이터 구조 문제와 분리 될 수 있습니다. NLP는 "about"또는 "during"이라는 단어를 정할 수도 있고 사용자 정의 언어로 정의 할 수도 있습니다 (Google 고급 검색은 "2 일 전"과 같은 문구로 생각합니다). 그러나 데이터 구조의 정밀도는 * 최상의 * 입력 데이터 정밀도와 같이 좋은 결과를 가져야하며 필요한 범위 (BC 및 AD 날짜)도 포함해야합니다. 'dateutil.parser'는 사용자 지정 어휘 ('about ','during ','BC ')를 처리하기 위해 원숭이 패치를하고 datetime 대신 astropy.Time을 사용하면 NLP 문제를 해결할 수 있습니다. – hobs

0

이 오래된 질문이지만, 내가 같은 일을했고 같은 날짜 처리하도록 설계 this article announcing datautil, 발견

을 BC/BCE 포함 먼 과거와 미래에
  • 날짜는 형식의 야생 다양한
  • 날짜 날짜 : 년 1 월 1890 월 1890 1890년 12월 1일 등 다양한 정밀
  • 날짜 봄 1890 : 예 1890, 1890-01 (즉 1890년 1월), 1890년 1월 2일
  • 부정확 한 날짜 : c1890 1890?, FL 1890 등

설치는

pip install datautil

입니다 지금까지 몇 분 동안 만 살펴 보았지만 str을 인수 (유니 코드 만 사용)로 받아들이지 않으며 고유 한 날짜 클래스 (Flexidate, 'ISO8601'의 약간 확장 된 버전)를 구현한다는 점에 주목했습니다. 유용한 어쩌면.

>>> from datautil.date import parse 
>>> parse('Jan 1890') 

error: 'str' object has no attribute 'read' 

>>> fd = parse(u'Jan 1890') 
<class 'datautil.date.FlexiDate'> 1890-01 

fd.as_datetime() 
>>> datetime.datetime(1890, 1, 1, 0, 0) 

>>> bc = parse(u'2000BC') 
<class 'datautil.date.FlexiDate'> -2000 

...

>>> bc.as_datetime() 
ValueError: year is out of range 

불행하게도 나를 위해, 나는 "circa"로 날짜를 처리 할 수있는 무언가를 찾고 있었다

>>> ca = parse(u'ca 1900') 
<class 'datautil.date.FlexiDate'> [UNPARSED: ca 1900] 

오 잘 (C, CA, 캘리포니아, CIRC 또는 CCA를...) - 나는 항상 풀 요청을 보낼 수 있다고 생각하십시오 .-)