Wyszukiwanie konkretnej etykiety lub notatki w rysunku DWG nie musi oznaczać otwierania pliku w edytorze CAD i ręcznego sprawdzania każdej adnotacji. Dzięki Pythonowi możesz przeglądać tekstowe elementy rysunku i identyfikować pasujące nazwy pomieszczeń, etykiety sprzętu lub inne adnotacje.
Ten artykuł pokazuje, jak wyszukać tekst w pliku DWG przy użyciu Pythona z Aspose.CAD for Python via .NET. Załadujesz plik DWG, wyszukasz tekst jednoliniowy i wieloliniowy, wydrukujesz dopasowaną zawartość oraz jej warstwę, a opcjonalnie ograniczysz wyszukiwanie do jednej warstwy. Przykład odczytuje rysunek bez jego modyfikacji lub eksportu.
Instalacja Aspose.CAD for Python via .NET
Aby podążać za przykładem, potrzebujesz środowiska Python obsługiwanego przez Aspose.CAD, pliku DWG zawierającego adnotacje tekstowe oraz pakietu Aspose.CAD. Strona produktu Aspose.CAD Python wymienia Python 3.9 lub nowszy wśród wymagań.
Zainstaluj pakiet z PyPI:
pip install aspose-cad
Możesz również zapoznać się z przewodnikiem instalacji Aspose.CAD w celu uzyskania szczegółów dotyczących konfiguracji pakietu.
Dla tego samouczka umieść plik o nazwie
drawing.dwgw katalogu roboczym. Najlepiej użyć rysunku, który zawiera zarówno jednowierszowe adnotacjeTEXT, jak i wielowierszoweMTEXT, aby móc sprawdzić oba przypadki.
Jak wyszukać tekst w pliku DWG przy użyciu Pythona
Pliki DWG przechowują zawartość rysunku jako encje. Do wyszukiwania tekstu przydatne są dwa typy encji:
- TEXT (
CadText): Zazwyczaj reprezentuje jednoliniową adnotację. Jej właściwośćdefault_valuedostarcza wartość tekstu. - MTEXT (
CadMText): Reprezentuje tekst wielowierszowy. Jej właściwośćfull_clear_textzwraca tekst bez kodów formatowania CAD.
Możesz wyszukiwać te elementy bez konieczności najpierw konwertowania rysunku na obraz lub PDF. Przebieg pracy jest prosty:
- Załaduj plik DWG przy użyciu
Image.load()i uzyskaj dostęp jakoCadImage. - Przejdź przez kolekcję
entitiesrysunku. - Zidentyfikuj encje
TEXTiMTEXToraz odczytaj ich zawartość. - Porównaj każdą wartość z Twoim terminem wyszukiwania.
- Wyświetl każde dopasowanie oraz warstwę, do której należy encja.
Poniższy przykład realizuje te kroki. Przeszukuje on entity TEXT i MTEXT najwyższego poziomu w rysunku; tekst wewnątrz zagnieżdżonych bloków i atrybutów jest omawiany osobno poniżej.
Wyszukiwanie tekstu w rysunku DWG programowo
Załóżmy, że musisz zlokalizować wszystkie adnotacje zawierające słowo valve w rysunku inżynierskim. Poniższy kod wyszukuje to słowo niezależnie od wielkości liter i raportuje warstwę każdego pasującego obiektu.
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 działa kod
Metoda Image.load() otwiera plik DWG. Pomocnicza funkcja cast() daje dostęp do członków CadImage, w tym do kolekcji entities.
Każdy podmiot ma type_name, który określa, jakiego rodzaju obiekt rysunkowy reprezentuje. Gdy ten typ jest TEXT, kod odczytuje CadText.default_value. Gdy typ jest MTEXT, używa CadMText.full_clear_text, aby uzyskać czytelną wieloliniową wartość.
Metoda casefold() w Pythonie sprawia, że porównanie jest niewrażliwe na wielkość liter, więc valve, Valve i VALVE są wszystkimi potencjalnymi dopasowaniami. Warunek obsługuje również dopasowania częściowe: wyszukiwanie valve dopasuje adnotację taką jak Main Valve.
Wreszcie, entity.layer_name identyfikuje warstwę CAD zawierającą każdy wynik. Może to pomóc w odnalezieniu pasującej notatki, gdy rysunek zawiera oddzielne warstwy dla sprzętu, wymiarów i adnotacji.
Oczekiwany wynik
Dla przykładowego rysunku z dwoma pasującymi adnotacjami, wynik może wyglądać następująco:
Match: Main Valve
Layer: Plumbing
---
Match: VALVE CONTROL ROOM
Layer: Annotations
---
Total matches: 2
To jest ilustrujący wynik. Twoje wyniki zależą od rzeczywistych encji tekstowych w twoim pliku DWG. Jeśli wyszukiwanie nie znajdzie pasujących encji TEXT lub MTEXT na najwyższym poziomie, ostatnia linia zgłosi Total matches: 0.
Wyszukiwanie tekstu w określonej warstwie DWG
Niektóre rysunki organizują zawartość w dedykowane warstwy, takie jak Annotations, Equipment lub Plumbing. Jeśli już znasz warstwę zawierającą potrzebny tekst, możesz filtrować encje przed sprawdzeniem ich wartości.
W głównym przykładzie zdefiniuj warstwę docelową przed pętlą:
target_layer = "Annotations"
Następnie wstaw ten warunek natychmiast po for entity in cad_image.entities::
if entity.layer_name.casefold() != target_layer.casefold():
continue
Reszta kodu wyszukiwania pozostaje niezmieniona. Tylko jednostki, których nazwa warstwy pasuje do Annotations, będą sprawdzane pod kątem słowa kluczowego. To porównanie również ignoruje wielkość liter w nazwie warstwy.
Filtr działa na warstwie przypisanej każdemu elementowi; nie rozszerza samodzielnie zagnieżdżonej zawartości bloków ani nie przeszukuje odwołań zewnętrznych.
Znajdź dokładny tekst lub wyodrębnij tekst z DWG
Główny przykład używa wyszukiwania podciągu bez uwzględniania wielkości liter. Możesz dostosować porównanie do swojego zadania.
Znajdź dokładną wartość tekstową: Zastąp warunek dopasowania następującym wyrażeniem, aby wykluczyć dłuższe adnotacje, które jedynie zawierają to słowo kluczowe:
if text_value and text_value.casefold() == keyword.casefold():
Użyj wyszukiwania rozróżniającego wielkość liter: Zachowaj oryginalną kapitalizację po obu stronach porównania:
if text_value and keyword in text_value:
Wyodrębnij wszystkie wartości TEXT i MTEXT na najwyższym poziomie: Usuń porównanie słowa kluczowego i przetwarzaj każdy niepusty text_value. Na przykład, po sprawdzeniach typu encji w głównej pętli, możesz dodać tekst do listy zamiast testować słowo kluczowe:
if text_value:
extracted_text.append(text_value)
Zainicjalizuj extracted_text = [] przed pętlą, jeśli używasz tej wariacji. Następnie możesz zapisać zebrane ciągi do pliku tekstowego lub użyć ich w osobnym procesie wyszukiwania lub indeksowania. Ta wariacja obejmuje nadal tylko typy jednostek obsługiwane przez pętlę.
Dlaczego niektóre teksty DWG mogą nie pojawiać się w wynikach wyszukiwania
Rysunek DWG może zawierać tekst w więcej miejscach niż w kolekcji najwyższego poziomu TEXT i MTEXT. Jeśli kod zwraca mniej dopasowań niż oczekiwano, sprawdź następujące możliwości:
- Text inside blocks: Blok może zawierać własne encje. Konieczne jest dodatkowe przeglądanie, aby sprawdzić te encje.
- Block attributes: Niektóre wartości tekstowe są przechowywane w encjach
CadAttriblubCadAttDefpowiązanych z wstawionymi blokami. Nie są one uwzględnione w głównym przykładzie. - External references: Tekst w zewnętrznie odwoływanym rysunku może wymagać osobnego przetworzenia odwoływanej zawartości.
- Raster content: Litery, które pojawiają się jedynie jako piksele w dołączonym obrazie, nie są encjami tekstowymi CAD. Znalezienie tych słów wymaga OCR, a nie podejścia opartego na encjach.
- Other annotation types: Wymiary, prowadnice i specjalistyczne obiekty CAD mogą przechowywać lub generować tekst w inny sposób i wymagają osobnego obsłużenia.
dokumentacja Aspose.CAD dotycząca pracy z tekstem identyfikuje CadText, CadMText, CadAttrib i CadAttDef jako odpowiednie typy encji zawierające tekst. Aby przeprowadzić szersze wyszukiwanie, rozszerz przeglądanie o te dodatkowe obiekty i przetestuj je względem struktury swoich rysunków.
Jeśli Image.load() nie powiedzie się, najpierw sprawdź ścieżkę do pliku, a następnie potwierdź, że plik DWG jest prawidłowy i używa obsługiwanego formatu. W przypadku nieoczekiwanych wyników rozpocznij od małego rysunku, którego wartości adnotacji i warstwy możesz zweryfikować w przeglądarce CAD.
Najczęściej zadawane pytania
Czy Python może wyszukiwać tekst w pliku DWG bez AutoCAD?
Tak. Dzięki Aspose.CAD for Python via .NET możesz otworzyć obsługiwany plik DWG i programowo przeglądać encje tekstowe. AutoCAD nie musi być zainstalowany dla tego przepływu pracy.
Jak mogę znaleźć konkretne słowo w rysunku DWG przy użyciu Pythona?
Załaduj plik jako CadImage, przeiteruj jego encje, odczytaj wartości TEXT i MTEXT, i porównaj każdą wartość z Twoim słowem kluczowym. Powyższy przykład używa casefold() oraz operatora in w Pythonie, aby znaleźć częściowe dopasowania bez uwzględniania wielkości liter.
Czy mogę wyodrębnić cały tekst z pliku DWG przy użyciu Pythona?
Możesz zbierać tekst z obsługiwanych typów encji, w tym CadText i CadMText. Kompleksowy proces ekstrakcji powinien również sprawdzać odpowiednie treści bloków, atrybuty i inne obiekty adnotacji, zamiast polegać wyłącznie na pętli encji najwyższego poziomu.
Uzyskaj darmową tymczasową licencję
Możesz poprosić o bezpłatną 30‑dniową licencję tymczasową aby ocenić Aspose.CAD for Python via .NET bez ograniczeń ewaluacji. Proces żądania licencji tymczasowej wymaga kwalifikującego się służbowego adresu e‑mail.
Zobacz przewodnik licencjonowania Aspose.CAD aby uzyskać informacje o zastosowaniu licencji w aplikacji Python.
Bezpłatne zasoby edukacyjne
Zapoznaj się z tymi zasobami, aby uzyskać więcej informacji na temat przetwarzania rysunków DWG i pracy z jednostkami CAD w języku Python:
- Aspose.CAD for Python via .NET Documentation – Instrukcje instalacji, operacje rysowania i przewodniki deweloperskie.
- Work with Text in CAD Drawings – Informacje o encjach zawierających tekst w plikach DWG i DXF.
- Aspose.CAD Python API Reference – Klasy, typy encji, właściwości i metody.
- Aspose.CAD for Python Downloads – Wydania produktu i zasoby pakietów.
- Aspose.CAD Free Support Forum – Zadawaj pytania dotyczące przetwarzania plików CAD i zachowania API.
Podsumowanie
Możesz wyszukiwać tekst w pliku DWG przy użyciu Pythona, ładując rysunek, przeglądając jego encje TEXT i MTEXT oraz porównując ich wartości z słowem kluczowym. Ten sam przepływ pracy może raportować pasujące warstwy, zawężać wyszukiwania do konkretnej warstwy lub zbierać tekst do dalszego przetwarzania. W przypadku rysunków zawierających atrybuty bloków lub zagnieżdżone adnotacje, rozszerz traversację encji przed poleganiem na wynikach jako pełnym spisie tekstu.
