특정 레이블이나 메모를 DWG 도면에서 검색한다고 해서 CAD 편집기에서 파일을 열고 각 주석을 수동으로 확인해야 하는 것은 아닙니다. Python을 사용하면 도면의 텍스트 엔터티를 검사하고 일치하는 방 이름, 장비 레이블 또는 기타 주석을 식별할 수 있습니다.
이 문서에서는 Python을 사용하여 DWG 파일에서 텍스트를 검색하는 방법을 Aspose.CAD for Python via .NET을 사용하여 보여줍니다. DWG 파일을 로드하고, 단일 행 및 다중 행 텍스트를 검색하며, 일치하는 내용과 해당 레이어를 출력하고, 선택적으로 검색을 하나의 레이어로 제한할 수 있습니다. 예제는 도면을 변경하거나 내보내지 않고 읽습니다.
Aspose.CAD for Python via .NET 설치
예제를 따라 하려면 Aspose.CAD가 지원하는 Python 환경, 텍스트 주석이 포함된 DWG 파일 및 Aspose.CAD 패키지가 필요합니다. Aspose.CAD Python 제품 페이지에서는 요구 사항 중 Python 3.9 이상이 나열되어 있습니다.
PyPI에서 패키지를 설치합니다:
pip install aspose-cad
패키지 설정 세부 사항에 대해서는 또한 Aspose.CAD 설치 가이드를 참조할 수 있습니다.
이 튜토리얼을 위해 작업 디렉터리에
drawing.dwg라는 파일을 넣으세요. 가능하면 단일 라인TEXT와 다중 라인MTEXT주석이 모두 포함된 도면을 사용하여 두 경우를 모두 확인할 수 있도록 하세요.
Python을 사용하여 DWG 파일에서 텍스트 검색하는 방법
DWG 파일은 도면 내용을 엔터티로 저장합니다. 텍스트 검색을 위해 유용한 두 가지 엔터티 유형은 다음과 같습니다:
- TEXT (
CadText): 일반적으로 단일 행 주석을 나타냅니다. 해당default_value속성은 텍스트 값을 제공합니다. - MTEXT (
CadMText): 여러 줄 텍스트를 나타냅니다. 해당full_clear_text속성은 CAD 서식 코드를 제외한 텍스트를 반환합니다.
그림을 이미지나 PDF 로 먼저 변환하지 않고도 이러한 엔터티를 검색할 수 있습니다. 워크플로는 간단합니다:
Image.load()로 DWG 파일을 로드하고CadImage로 접근합니다.- 도면의
entities컬렉션을 반복합니다. TEXT및MTEXT엔터티를 식별하고 해당 내용을 읽습니다.- 각 값을 검색어와 비교합니다.
- 일치하는 항목과 해당 엔터티가 속한 레이어를 표시합니다.
다음 예제는 이러한 단계를 구현합니다. 이 예제는 도면의 최상위 TEXT 및 MTEXT 엔터티를 검색합니다; 중첩 블록 및 속성 내부의 텍스트는 아래에서 별도로 논의됩니다.
DWG 도면에서 텍스트를 프로그래밍 방식으로 찾기
예를 들어, 엔지니어링 도면에서 단어 valve가 포함된 모든 주석을 찾아야 한다고 가정해 보십시오. 다음 코드는 대소문자를 구분하지 않고 해당 단어를 검색하고 일치하는 각 엔터티의 레이어를 보고합니다.
import aspose.cad as cad
from aspose.pycore import cast
# Path to the source drawing and the text to find.
dwg_path = "drawing.dwg"
keyword = "valve"
if not keyword:
raise ValueError("The search keyword must not be empty.")
# Load the DWG as a CAD image.
image = cad.Image.load(dwg_path)
cad_image = cast(cad.fileformats.cad.CadImage, image)
entity_types = cad.fileformats.cad.cadconsts.CadEntityTypeName
matches = 0
# Search top-level text entities.
for entity in cad_image.entities:
text_value = None
if entity.type_name == entity_types.TEXT:
text_entity = cast(
cad.fileformats.cad.cadobjects.CadText, entity
)
text_value = text_entity.default_value
elif entity.type_name == entity_types.MTEXT:
mtext_entity = cast(
cad.fileformats.cad.cadobjects.CadMText, entity
)
text_value = mtext_entity.full_clear_text
# Match a word or phrase without case sensitivity.
if text_value and keyword.casefold() in text_value.casefold():
matches += 1
print(f"Match: {text_value}")
print(f"Layer: {entity.layer_name}")
print("---")
print(f"Total matches: {matches}")
코드 작동 방식
Image.load() 메서드는 DWG 파일을 엽니다. cast() 헬퍼는 CadImage 멤버에 접근할 수 있게 해 주며, 여기에는 entities 컬렉션이 포함됩니다.
각 엔터티는 자신이 나타내는 도면 객체의 종류를 식별하는 type_name을 가지고 있습니다. 해당 유형이 TEXT인 경우 코드는 CadText.default_value를 읽습니다. 유형이 MTEXT인 경우, 읽을 수 있는 다중 행 값을 얻기 위해 CadMText.full_clear_text를 사용합니다.
Python의 casefold() 메서드는 비교를 대소문자를 구분하지 않게 하므로 valve, Valve, VALVE 모두 잠재적인 일치 항목이 됩니다. 이 조건은 부분 일치도 지원합니다: valve를 검색하면 Main Valve와 같은 주석과 일치합니다.
마지막으로, entity.layer_name은 각 결과를 포함하는 CAD 레이어를 식별합니다. 이는 도면에 장비, 치수 및 주석에 대한 별도 레이어가 있는 경우 일치하는 주석을 찾는 데 도움이 될 수 있습니다.
예상 출력
두 개의 일치하는 주석이 포함된 샘플 도면의 경우, 출력은 다음과 같이 표시될 수 있습니다:
Match: Main Valve
Layer: Plumbing
---
Match: VALVE CONTROL ROOM
Layer: Annotations
---
Total matches: 2
이것은 예시 출력입니다. 결과는 DWG 파일에 있는 실제 텍스트 엔터티에 따라 달라집니다. 검색에서 일치하는 최상위 TEXT 또는 MTEXT 엔터티를 찾지 못하면 마지막 줄에 Total matches: 0이 보고됩니다.
특정 DWG 레이어에서 텍스트 검색
일부 도면은 Annotations, Equipment, Plumbing와 같은 전용 레이어에 콘텐츠를 구성합니다. 필요한 텍스트가 포함된 레이어를 이미 알고 있다면, 값을 확인하기 전에 엔터티를 필터링할 수 있습니다.
주요 예제에서는 루프 전에 대상 레이어를 정의합니다:
target_layer = "Annotations"
그런 다음 for entity in cad_image.entities: 바로 뒤에 이 조건을 삽입하십시오:
if entity.layer_name.casefold() != target_layer.casefold():
continue
검색 코드의 나머지 부분은 변경되지 않습니다. 레이어 이름이 Annotations와 일치하는 엔터티만 키워드에 대해 검사됩니다. 이 비교에서는 레이어 이름의 대소문자를 무시합니다.
필터는 각 엔터티에 할당된 레이어에서 작동합니다; 자체적으로 중첩 블록 콘텐츠를 확장하거나 외부 참조를 검색하지 않습니다.
DWG에서 정확한 텍스트 찾기 또는 텍스트 추출
주된 예제는 대소문자를 구분하지 않는 부분 문자열 검색을 사용합니다. 작업에 맞게 비교를 조정할 수 있습니다.
정확한 텍스트 값을 찾기: 일치 조건을 다음 식으로 교체하여 단순히 키워드를 포함하는 더 긴 주석을 제외합니다.
if text_value and text_value.casefold() == keyword.casefold():
대소문자를 구분하는 검색 사용: 원본 대소문자를 비교 양쪽 모두 유지합니다:
if text_value and keyword in text_value:
모든 최상위 TEXT 및 MTEXT 값 추출: 키워드 비교를 제거하고 모든 비어 있지 않은 text_value를 처리합니다. 예를 들어, 메인 루프에서 엔터티 유형 검사를 수행한 후, 키워드를 테스트하는 대신 텍스트를 리스트에 추가할 수 있습니다.
if text_value:
extracted_text.append(text_value)
이 변형을 사용하는 경우 루프 전에 extracted_text = []를 초기화하십시오. 그런 다음 수집된 문자열을 텍스트 파일에 기록하거나 별도의 검색 또는 인덱싱 워크플로에서 사용할 수 있습니다. 이 변형은 여전히 루프에서 처리되는 엔터티 유형만을 포함합니다.
일부 DWG 텍스트가 검색 결과에 표시되지 않을 수 있는 이유
DWG 도면은 최상위 TEXT 및 MTTEXT 컬렉션보다 더 많은 위치에 텍스트를 포함할 수 있습니다. 코드가 예상보다 적은 일치를 반환하는 경우, 다음 가능성을 확인하십시오:
- Text inside blocks: 블록은 자체 엔티티를 포함할 수 있습니다. 해당 엔티티를 검사하려면 추가 순회가 필요합니다.
- Block attributes: 일부 텍스트 값은 삽입된 블록과 연결된
CadAttrib또는CadAttDef엔티티에 저장됩니다. 이는 주요 예제에 포함되지 않습니다. - External references: 외부에서 참조된 도면의 텍스트는 해당 내용을 별도로 처리해야 할 수 있습니다.
- Raster content: 첨부된 이미지에서 픽셀로만 표시되는 문자는 CAD 텍스트 엔티티가 아닙니다. 이러한 단어를 찾으려면 엔티티 기반 접근 방식이 아니라 OCR이 필요합니다.
- Other annotation types: 치수, 리더 및 특수 CAD 객체는 텍스트를 다르게 저장하거나 생성할 수 있으며 별도의 처리가 필요합니다.
텍스트 작업에 대한 Aspose.CAD 문서는 CadText, CadMText, CadAttrib, CadAttDef를 관련 텍스트를 포함하는 엔터티 유형으로 식별합니다. 보다 넓은 검색을 위해 탐색을 확장하여 이러한 추가 객체들을 포함하고 도면 구조에 대해 테스트하십시오.
If Image.load()가 실패하면 먼저 파일 경로를 확인하고, DWG 파일이 유효하며 지원되는 형식을 사용하는지 확인하십시오. 예상치 못한 결과가 나타날 경우, 주석 값과 레이어를 CAD 뷰어에서 확인할 수 있는 작은 도면부터 시작하십시오.
자주 묻는 질문
Python으로 AutoCAD 없이 DWG 파일 내부의 텍스트를 검색할 수 있나요?
예. Aspose.CAD for Python via .NET를 사용하면 지원되는 DWG 파일을 열고 텍스트 엔터티를 프로그래밍 방식으로 검사할 수 있습니다. AutoCAD를 설치할 필요가 없습니다.
Python을 사용하여 DWG 도면에서 특정 단어를 찾으려면 어떻게 해야 하나요?
파일을 CadImage로 로드하고, 엔터티를 반복하면서 TEXT와 MTEXT 값을 읽은 다음 각 값을 키워드와 비교합니다. 위 예제는 casefold()와 Python의 in 연산자를 사용하여 대소문자를 구분하지 않는 부분 일치를 찾습니다.
Python을 사용하여 DWG 파일에서 모든 텍스트를 추출할 수 있나요?
지원되는 엔터티 유형에서 텍스트를 수집할 수 있으며, 여기에는 CadText와 CadMText가 포함됩니다. 포괄적인 추출 프로세스는 최상위 엔터티 루프에만 의존하는 대신 관련 블록 내용, 속성 및 기타 주석 객체도 검사해야 합니다.
무료 임시 라이선스 받기
무료 30일 임시 라이선스를 요청하면 평가 제한 없이 Aspose.CAD for Python via .NET을 평가할 수 있습니다. 임시 라이선스 요청 절차에는 적격 비즈니스 이메일 주소가 필요합니다.
Python 애플리케이션에서 라이선스를 적용하는 방법에 대한 정보는 Aspose.CAD 라이선스 가이드를 참조하십시오.
무료 학습 자료
Python에서 DWG 도면을 처리하고 CAD 엔터티 작업에 대한 자세한 정보를 보려면 다음 리소스를 확인하십시오:
- Aspose.CAD for Python via .NET Documentation – 설정 안내, 도면 작업 및 개발 가이드.
- Work with Text in CAD Drawings – DWG 및 DXF 파일의 텍스트 포함 엔터티에 대한 정보.
- Aspose.CAD Python API Reference – 클래스, 엔터티 유형, 속성 및 메서드.
- Aspose.CAD for Python Downloads – 제품 릴리스 및 패키지 리소스.
- Aspose.CAD Free Support Forum – CAD 파일 처리 및 API 동작에 대한 질문을 하세요.
결론
Python을 사용하여 DWG 파일에서 텍스트를 검색하려면 도면을 로드하고, TEXT 및 MTEXT 엔터티를 검사한 다음 키워드와 값을 비교하면 됩니다. 동일한 워크플로를 사용하면 일치하는 레이어를 보고하고, 특정 레이어로 검색 범위를 좁히거나, 추가 처리를 위해 텍스트를 수집할 수 있습니다. 블록 속성이나 중첩된 주석을 포함하는 도면의 경우, 결과를 완전한 텍스트 인벤토리로 사용하기 전에 엔터티 순회를 확장하십시오.
