tree 라이브러리에서 작업 중이며 필요한 기능 중 일부는 패턴과 일치하는 하위 노드를 노드에서 검색 할 수 있습니다.트리 매칭 알고리즘?
'패턴'은 일치시킬 하위 트리의 노드 속성뿐만 아니라 구조를 레이아웃하는 사양 (또는 기준)입니다.
예를 들어 트리가 특정 종의 새에 관한 데이터를 나타냅니다. 또한 이러한 트리의 노드가 다음과 같은 속성이 있다고 가정 :
- 위치를
- 섹스
- 날개
- 부모 노드 감안할 때 brood_size는
, 내가 것 체중
"이 새의 후손 인 의 모든 수컷 새들을 데려와 XXX 도시에 거주하고 체중> 100g. 발견 그러한 조류해야 또한 적어도 두 형제와 한 자매가 있고, 그 자체가 하나 이상의 아이를 "이 있어야합니다
< 노트>
그냥 내가 수 있기를 기대하지 않는다, 명확하게 위에서 수행 한 것처럼 일반 영어를 사용하여 쿼리 할 수 있습니다. 트리에서 수행하려는 일치 유형을 설명하기 위해 "일반 영어 쿼리"만 사용했습니다. 일치를 위해 기호를 사용할 것으로 완전히 기대합니다 (일반 텍스트).
</note>
아마도 나무와 일치하는 정규식 형식 패턴을 사용하려고 생각하고 있습니다. 한 가지 방법은 각 정규 표현식을 사용할 수 있도록 각 노드의 문자열 표현을 사용하는 것입니다. 그러나 반복되는 데이터가 많아 지므로 매우 비효율적 일 수 있습니다. 즉 하위 노드의 문자열 표현은 그들의 부모 표현은 그들의 부모 표현 문자열의 상위 집합이 될 것입니다. 재귀 적으로 나무 위로 - 이것은 적당한 크기의 나무에 대해 다루기가 쉽지 않을 수 있습니다 - 더 좋은 방법이 있어야합니다.
패턴을 기반으로 노드에서 노드 (하위 트리)를 선택할 수있는 알고리즘을 알고있는 사람이 있습니까?
일반적인 알고리즘을 요청했지만 파이썬에서 구현하고 있습니다. 그러한 알고리즘 (실제로 쓰여질 수있는 경우)을 자세히 보여주는 조각은 엄청나게 유용 할 것입니다.
아마도 재귀 목록을 사용하는 것이 훨씬 나을 것입니다. 어쨌든 오버 헤드를 할 가치가없는 중간 목록의 문자열 목록을 사용하는 것이 좋습니다. 좀 더 구체적인 예를 들어 당신에게 더 나은 대답을 줄 수 있습니다. – msw
당신은 * 2 * 문제가 있습니다 : a) 나무 패턴 일치를 공식 해석 가능한 엔티티로 표현하는 방법 및 b) 자유 텍스트 영어 쿼리를 그러한 패턴으로 변환하는 것. a) 잘 알려져있다. 하나의 옵션에 대한 내 대답을 참조하십시오. b) 여전히 연구 주제이다. 네가 직접 해보고 싶지 않은가. –
@Ira : 분명히하기 위해, 나는 나무에서 수행하고 싶은 일치 유형을 설명하기 위해 "일반 영어 쿼리"만을 사용했습니다. 실제로 (평범한 텍스트와는 대조적으로) 일치에 대한 기호를 사용할 것으로 기대합니다. - – morpheous