Vyhledávání konkrétního štítku nebo poznámky v kresbě DWG nemusí znamenat otevření souboru v CAD editoru a ruční kontrolu každé anotace. S Pythonem můžete prozkoumat textové entity kresby a identifikovat odpovídající názvy místností, štítky zařízení nebo jiné anotace.
Tento článek ukazuje, jak vyhledat text v souboru DWG pomocí Pythonu s Aspose.CAD for Python via .NET. Načtete soubor DWG, vyhledáte jednořádkový i víceřádkový text, vytisknete odpovídající obsah a jeho vrstvu a volitelně omezíte vyhledávání na jednu vrstvu. Příklad načte výkres bez jeho změny nebo exportu.
Instalace Aspose.CAD for Python via .NET
Chcete-li sledovat příklad, potřebujete prostředí Python podporované Aspose.CAD, soubor DWG, který obsahuje textové anotace, a balíček Aspose.CAD. Na Aspose.CAD Python product page jsou uvedeny požadavky, mezi nimiž je Python 3.9 nebo novější.
Nainstalujte balíček z PyPI:
pip install aspose-cad
Můžete také konzultovat Aspose.CAD instalační příručka pro podrobnosti o nastavení balíčku.
Pro tento tutoriál umístěte soubor s názvem
drawing.dwgdo pracovního adresáře. Ideálně použijte výkres, který obsahuje jak jednorázovéTEXT, tak víceřádkovéMTEXTanotace, abyste mohli zkontrolovat oba případy.
Jak vyhledat text v souboru DWG pomocí Pythonu
Soubory DWG ukládají obsah výkresu jako entity. Pro vyhledávání textu jsou užitečné dva typy entit:
- TEXT (
CadText): Obvykle představuje anotaci na jeden řádek. Jeho vlastnostdefault_valueposkytuje textovou hodnotu. - MTEXT (
CadMText): Představuje víceřádkový text. Jeho vlastnostfull_clear_textvrací text bez CAD formátovacích kódů.
Můžete vyhledávat tyto entity, aniž byste nejprve převáděli výkres na obrázek nebo PDF. Průběh práce je jednoduchý:
- Načtěte soubor DWG pomocí
Image.load()a přistupte k němu jako kCadImage. - Procházejte kolekci
entitiesvýkresu. - Identifikujte entity
TEXTaMTEXTa přečtěte jejich obsah. - Porovnejte každou hodnotu s vaším vyhledávacím termínem.
- Zobrazte každou shodu a vrstvu, do které entita patří.
Následující příklad implementuje tyto kroky. Prohledává nejvyšší úroveň entit TEXT a MTEXT v výkresu; text uvnitř vnořených bloků a atributů je diskutován níže samostatně.
Vyhledání textu v DWG výkresu programově
Předpokládejme, že potřebujete najít každou anotaci obsahující slovo valve v technickém výkresu. Následující kód vyhledá toto slovo bez ohledu na velikost písmen a vypíše vrstvu každé odpovídající entity.
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}")
Jak kód funguje
Metoda Image.load() otevře soubor DWG. Pomocná funkce cast() vám pak poskytne přístup k členům CadImage, včetně jeho kolekce entities.
Každá entita má type_name, který identifikuje, jaký typ kreslicího objektu představuje. Když je tento typ TEXT, kód čte CadText.default_value. Když je typ MTEXT, používá CadMText.full_clear_text k získání čitelné víceřádkové hodnoty.
Metoda casefold() v Pythonu provádí porovnání bez rozlišení velkých a malých písmen, takže valve, Valve a VALVE jsou všechny možné shody. Podmínka také podporuje částečné shody: hledání valve najde anotaci jako Main Valve.
Nakonec entity.layer_name identifikuje CAD vrstvu obsahující každý výsledek. To vám může pomoci najít odpovídající poznámku, když výkres obsahuje samostatné vrstvy pro zařízení, rozměry a anotace.
Očekávaný výstup
Pro ukázkový výkres se dvěma odpovídajícími anotacemi by výstup mohl vypadat takto:
Match: Main Valve
Layer: Plumbing
---
Match: VALVE CONTROL ROOM
Layer: Annotations
---
Total matches: 2
Toto je ilustrační výstup. Vaše výsledky závisí na skutečných textových entitách ve vašem DWG souboru. Pokud vyhledávání nenajde žádné odpovídající entity nejvyšší úrovně TEXT nebo MTEXT, poslední řádek zobrazí Total matches: 0.
Vyhledat text ve specifické vrstvě DWG
Některé výkresy organizují obsah do vyhrazených vrstev, jako jsou Annotations, Equipment nebo Plumbing. Pokud již znáte vrstvu, která obsahuje požadovaný text, můžete před kontrolou jejich hodnot filtrovat entity.
V hlavním příkladu definujte cílovou vrstvu před smyčkou:
target_layer = "Annotations"
Poté vložte tuto podmínku okamžitě po for entity in cad_image.entities::
if entity.layer_name.casefold() != target_layer.casefold():
continue
Zbytek vyhledávacího kódu zůstává nezměněn. Pouze entity, jejichž název vrstvy odpovídá Annotations, budou zkontrolovány na klíčové slovo. Toto porovnání také ignoruje velikost písmen v názvu vrstvy.
Filtr funguje na přiřazené vrstvě každého objektu; sám o sobě nerozšiřuje vnořený blokový obsah ani nevyhledává externí odkazy.
Najít přesný text nebo extrahovat text z DWG
Hlavní příklad používá vyhledávání podřetězce bez rozlišení velkých a malých písmen. Můžete upravit porovnání tak, aby vyhovovalo vašemu úkolu.
Najděte přesnou textovou hodnotu: Nahraďte podmínku shody následujícím výrazem, abyste vyloučili delší anotace, které pouze obsahují klíčové slovo:
if text_value and text_value.casefold() == keyword.casefold():
Použijte vyhledávání rozlišující velikost písmen: Zachovejte původní velikost písmen na obou stranách porovnání:
if text_value and keyword in text_value:
Extrahujte všechny hodnoty TEXT a MTEXT na nejvyšší úrovni: Odstraňte porovnání klíčového slova a zpracujte každou neprázdnou text_value. Například po kontrolách typu entity v hlavní smyčce můžete přidat text do seznamu místo testování klíče:
if text_value:
extracted_text.append(text_value)
Inicializujte extracted_text = [] před smyčkou, pokud používáte tuto variantu. Pak můžete zapsat shromážděné řetězce do textového souboru nebo je použít v samostatném vyhledávacím či indexovacím workflow. Tato varianta stále pokrývá pouze typy entit zpracovávané smyčkou.
Proč se některý text DWG nemusí zobrazovat ve výsledcích vyhledávání
DWG výkres může obsahovat text na více místech než v kolekci TEXT a MTEXT na nejvyšší úrovni. Pokud kód vrací méně shod, než se očekává, zkontrolujte následující možnosti:
- Text uvnitř bloků: Blok může obsahovat své vlastní entity. Je potřeba provést další procházení, aby se tyto entity zkontrolovaly.
- Atributy bloku: Některé textové hodnoty jsou uloženy v entitách
CadAttribneboCadAttDefspojených s vloženými bloky. Tyto nejsou zahrnuty v hlavním příkladu. - Externí odkazy: Text v externě odkazovaném výkresu může vyžadovat samostatné zpracování odkazovaného obsahu.
- Rastrový obsah: Písmena, která se v připojeném obrázku objevují pouze jako pixely, nejsou CAD textovými entitami. Vyhledání těchto slov vyžaduje OCR místo tohoto přístupu založeného na entitách.
- Další typy anotací: Rozměry, vodítka a specializované CAD objekty mohou ukládat nebo generovat text odlišně a vyžadují samostatné zpracování.
Dokumentace Aspose.CAD o práci s textem identifikuje CadText, CadMText, CadAttrib a CadAttDef jako relevantní typy entit nesoucích text. Pro širší vyhledávání rozšiřte procházení tak, aby zahrnovalo tyto další objekty, a otestujte jej na struktuře vašich výkresů.
Pokud Image.load() selže, nejprve zkontrolujte cestu k souboru a poté potvrďte, že soubor DWG je platný a používá podporovaný formát. Pro neočekávané výsledky začněte s malým výkresem, jehož hodnoty anotací a vrstvy můžete ověřit v CAD prohlížeči.
Často kladené otázky
Může Python vyhledávat text v souboru DWG bez AutoCADu?
Ano. S Aspose.CAD for Python via .NET můžete otevřít podporovaný soubor DWG a programově prozkoumat textové entity. AutoCAD nemusí být pro tento pracovní postup nainstalován.
Jak mohu najít konkrétní slovo v DWG výkresu pomocí Pythonu?
Načtěte soubor jako CadImage, projděte jeho entity, přečtěte hodnoty TEXT a MTEXT a porovnejte každou hodnotu s vaším klíčovým slovem. Výše uvedený příklad používá casefold() a operátor in v Pythonu k nalezení částečných shod bez ohledu na velikost písmen.
Mohu pomocí Pythonu extrahovat veškerý text ze souboru DWG?
Můžete sbírat text z podporovaných typů entit, včetně CadText a CadMText. Komplexní proces extrakce by měl také prozkoumat relevantní obsah bloků, atributy a další objekty anotací, místo aby se spoléhal pouze na smyčku entit na nejvyšší úrovni.
Získejte bezplatnou dočasnou licenci
Můžete požádat o bezplatnou 30denní dočasnou licenci, abyste mohli vyzkoušet Aspose.CAD for Python via .NET bez omezení hodnocení. Proces žádosti o dočasnou licenci vyžaduje oprávněnou firemní e‑mailovou adresu.
Viz Aspose.CAD licensing guide pro informace o aplikaci licence ve vaší Python aplikaci.
Bezplatné výukové zdroje
Prozkoumejte tyto zdroje pro více informací o zpracování výkresů DWG a práci s CAD entitami v Pythonu:
- Aspose.CAD for Python via .NET Documentation – Instrukce pro nastavení, operace kreslení a vývojové příručky.
- Work with Text in CAD Drawings – Informace o entitách nesoucích text v souborech DWG a DXF.
- Aspose.CAD Python API Reference – Třídy, typy entit, vlastnosti a metody.
- Aspose.CAD for Python Downloads – Vydání produktu a zdroje balíčků.
- Aspose.CAD Free Support Forum – Pokládejte otázky ohledně zpracování CAD souborů a chování API.
Závěr
Můžete vyhledávat text v souboru DWG pomocí Pythonu načtením výkresu, kontrolou jeho entit TEXT a MTTEXT a porovnáním jejich hodnot s klíčovým slovem. Stejný postup může zobrazit odpovídající vrstvy, zúžit vyhledávání na konkrétní vrstvu nebo shromáždit text pro další zpracování. Pro výkresy, které obsahují atributy bloků nebo vnořené anotace, rozšiřte procházení entit, než se spolehnete na výsledky jako na kompletní inventář textu.
