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.dwg w katalogu roboczym. Najlepiej użyć rysunku, który zawiera zarówno jednowierszowe adnotacje TEXT, jak i wielowierszowe MTEXT, 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_value dostarcza wartość tekstu.
  • MTEXT (CadMText): Reprezentuje tekst wielowierszowy. Jej właściwość full_clear_text zwraca 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:

  1. Załaduj plik DWG przy użyciu Image.load() i uzyskaj dostęp jako CadImage.
  2. Przejdź przez kolekcję entities rysunku.
  3. Zidentyfikuj encje TEXT i MTEXT oraz odczytaj ich zawartość.
  4. Porównaj każdą wartość z Twoim terminem wyszukiwania.
  5. 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 CadAttrib lub CadAttDef powią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:

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.

Zobacz także