얼마 전에 cables which WikiLeaks released에 대해 BNF-based grammar을 작성하기 시작했습니다. 그러나 나는 이제 나의 접근 방식이 최고가 아니 었음을 깨달았으며 약간의 개선을 기대하고있다.WikiLeaks 케이블 용 내결함성 Python 기반 파서
cabe는 세 부분으로 구성됩니다. 머리 부분에는 RFC2822 스타일 형식이 있습니다. 이 구문 분석은 일반적으로 정확합니다. 텍스트 부분에는 좀 더 비공식적 인 명세가 있습니다. 예를 들어 REF 행이 있습니다. 이것은 REF:
으로 시작해야하지만 다른 버전을 발견했습니다. 다음 정규식은 대부분의 경우를 포착합니다 : ^\s*[Rr][Ee][Ff][Ss: ]
. 그래서 앞쪽에 공백이 있고, 다른 경우 등등. 텍스트 부분은 대부분 특별한 형식의 제목이있는 일반 텍스트입니다.
우리는 각 필드 (날짜, REF 등)를 인식하고 데이터베이스에 넣기를 원합니다. Pythons SimpleParse를 선택했습니다. 현재 파싱은 인식하지 못하는 각 필드에서 멈 춥니 다. 우리는 이제 내결함성이있는 솔루션을 찾고 있습니다. 모든 필드에는 어떤 종류의 순서가 있습니다. 파서가 필드를 인식하지 못하면 파서는 현재 필드에 'not recognized'-blob을 추가하고 계속 진행해야합니다. (또는 어쩌면 당신은 더 나은 접근법을 가지고 있습니다).
어떤 종류의 파서 또는 다른 종류의 해결책을 제안 하시겠습니까? 주위에 더 좋은 점이 있습니까?
파서가 필요 하신가요? 케이블 구조에 대해 설명한 내용은 유형 3 언어 (촘스키의 분류에서와 같이)로 들리는데, 이는 렉서 (예 : flex) 또는 정규식은 케이블을 "파싱"하는 수단입니다. – phynfo
각 헤더 토큰에'/ not_recognized'를 추가하지 않는 이유는 무엇입니까? –
정말 파서가 필요한지 잘 모르겠습니다. 정규 표현식보다 읽기 쉽습니다. 그것을 부탁 드린다. 나는 굴곡을 보게 될 것이다. – qbi