İki Word dosyasını karşılaştırdığınızda tek fark bir listenin numaralandırılması ise, örneğin 1. ve 2. olan maddeler artık a. ve b. olduysa ya da numaralı bir liste madde işaretli bir listeye dönüştüyse, Aspose.Words varsayılan olarak hiçbir fark raporlamaz. Bu öğreticide, Word dosyalarını Python’da karşılaştırırken numaralandırma değişikliklerini nasıl tespit edeceğinizi gösterir. Ayrıca bulunan değişiklikleri nasıl gözden geçireceğinizi, kabul edeceğinizi veya reddedeceğinizi açıklar.

Temel Çıkarımlar

  • Varsayılan olarak, bir listenin numaralandırma stilinde veya madde işareti karakterinde yapılan bir değişiklik, Word dosyalarını karşılaştırdığınızda revizyon üretmez.
  • options.advanced_options.compare_list_definitions = True ayarlandığında, etkilenen her liste paragrafı bir FORMAT_CHANGE revizyonu olarak raporlanır.
  • Liste öğeleri içindeki metin değişiklikleri her iki durumda da raporlanır. Bu seçenek yalnızca numaralandırma ve madde işareti değişikliklerini ekler.
  • ignore_formatting=True seçeneği açık olduğunda bile numaralandırma değişikliklerini gizler.

Neden Numaralandırma Değişiklikleri Varsayılan Olarak Görünmez

Word’deki numaralandırma ve madde işaretleri bir liste tanımından gelir. Bu, her liste seviyesinin nasıl göründüğünü açıklar: sayı stili (1., a., i.), madde işareti karakteri ve ilgili biçimlendirme. Belgeleri karşılaştırdığınızda, Aspose.Words varsayılan olarak Microsoft Word’i izler ve liste tanımlarını karşılaştırmadan çıkarır. Bu nedenle yalnızca numaralandırma değiştiyse, karşılaştırma raporlayacak bir şey bulamaz.

compare_list_definitions seçeneğinin Word’de eşdeğeri yoktur. Bu, Aspose.Words’e karşılaştırmada liste tanımlarını dahil etmesini söyler. İşte sürüm 26.9’da iki öğeli listeleri karşılaştırırken gördüklerimiz:

Orijinal listeDüzenlenmiş listeSeçenek kapalıSeçenek açık
Numaralı 1. 2.Madde işaretli0 revizyon2 FORMAT_CHANGE
Numaralı 1. 2.Harflendirilmiş a. b.0 revizyon2 FORMAT_CHANGE
Numaralı, “Öğe 2”Madde işaretli, “Öğe iki”2 (DELETION, INSERTION)4 (ekler 2 FORMAT_CHANGE)
NumaralıAynı numaralı liste0 revizyon0 revizyon

Son satır pratikte önemlidir. Seçeneği açmak, her iki dosyada da aynı olan listeler için ekstra revizyonlar oluşturmaz.

Önkoşullar

Aspose.Words for Python via .NET 26.9 veya daha yeni bir sürüme ihtiyacınız var. Bunu PyPI üzerinden kurun veya yükseltin:

pip install --upgrade "aspose-words>=26.9"

Lisans olmadan, Aspose.Words sınırlamalarla değerlendirme modunda çalışır. Bir geçici lisans test ederken bu sınırlamaları kaldırır.

Farkı Görün: Seçenekle ve Seçeneksiz Numaralandırma Değişiklikleri

Aşağıdaki betik, aynı iki öğeyi içeren iki belge oluşturur. Birincisi numaralı bir liste kullanırken, ikincisi madde işaretli bir liste kullanır. Betik, bunları iki kez karşılaştırır; bir kez seçenek kapalıyken ve bir kez açıkken, böylece seçeneğin tam olarak neyi değiştirdiğini görebilirsiniz.

import datetime
import aspose.words as aw

def build_list_document(bulleted: bool) -> aw.Document:
    """Create a two-item list, either numbered or bulleted."""
    doc = aw.Document()
    builder = aw.DocumentBuilder(doc=doc)
    if bulleted:
        builder.list_format.apply_bullet_default()
    else:
        builder.list_format.apply_number_default()
    builder.writeln("Item 1")
    builder.writeln("Item 2")
    builder.list_format.remove_numbers()
    return doc

def compare_lists(compare_list_definitions: bool) -> aw.Document:
    original = build_list_document(bulleted=False)
    edited = build_list_document(bulleted=True)

options = aw.comparing.CompareOptions()
    options.advanced_options.compare_list_definitions = compare_list_definitions

# compare() writes revisions into `original`; it returns nothing.
    original.compare(
        document=edited,
        author="Reviewer",
        date_time=datetime.datetime.now(),
        options=options,
    )
    return original

for flag in (False, True):
    result = compare_lists(flag)
    print(f"compare_list_definitions={flag}: {result.revisions.count} revision(s)")
    for revision in result.revisions:
        revision_type = aw.RevisionType(revision.revision_type).name
        text = revision.parent_node.get_text().strip()
        print(f"  {revision_type}: {text}")

result.save("compared-lists.docx")

Betik çalıştırıldığında şu çıktıyı verir:

compare_list_definitions=False: 0 revision(s)
compare_list_definitions=True: 2 revision(s)
  FORMAT_CHANGE: Item 1
  FORMAT_CHANGE: Item 2

Kodun Çalışma Şekli

  • build_list_document DocumentBuilder.list_format kullanarak varsayılan numaralı veya madde işaretli bir liste başlatır, iki öğe yazar ve ardından remove_numbers() çağırır, böylece sonraki paragraflar listenin parçası olmaz.
  • CompareOptions.advanced_options compare_list_definitions öğesini ortaya çıkarır; varsayılan değeri False‘tur.
  • original.compare(...) originalı edited ile karşılaştırır ve farkları original içinde revizyonlar olarak kaydeder. Metot None döndürür, bu yüzden sonuçları çağırdığınız belgede okuyun.
  • Her revizyonun parent_node biçimi değişen liste paragrafıdır. revision_type numaralandırma ve madde işareti değişiklikleri için RevisionType.FORMAT_CHANGE‘tir.

İki Word Dosyası Arasındaki Numaralandırma Değişikliklerini Algıla

Gerçek bir iş akışında, iki mevcut dosyayı, örneğin bir sözleşmenin iki sürümünü karşılaştırırsınız. Bu karşılaştırmalar genellikle başka revizyonları da içerir, bu yüzden aşağıdaki betik yalnızca liste paragraflarında bulunan biçimlendirme değişikliklerini tutar.

import datetime
import aspose.words as aw

original = aw.Document("contract-v1.docx")
edited = aw.Document("contract-v2.docx")

options = aw.comparing.CompareOptions()
options.advanced_options.compare_list_definitions = True

original.compare(edited, "Reviewer", datetime.datetime.now(), options)

# Keep only formatting revisions that sit on list paragraphs.
list_changes = [
    rev for rev in original.revisions
    if rev.revision_type == aw.RevisionType.FORMAT_CHANGE
    and rev.parent_node is not None
    and rev.parent_node.node_type == aw.NodeType.PARAGRAPH
    and rev.parent_node.as_paragraph().list_format.is_list_item
]

print(f"Total revisions: {original.revisions.count}")
print(f"Formatting changes on list paragraphs: {len(list_changes)}")
for rev in list_changes:
    print(f"  {rev.parent_node.get_text().strip()}")

original.save("contract-compared.docx")

Testimizde, sözleşmenin 2. sürümü numaralı listeyi madde işaretlerine dönüştürdü ve ayrıca alakasız bir cümleyi kalın yaptı. Çıktı şu şekildeydi:

Total revisions: 5
Formatting changes on list paragraphs: 2
  Invoices are due in 30 days.
  Late fees apply after 45 days.

Filtre iki liste öğesini seçer ve kalın değişikliğini atlar, çünkü bu revizyon bir liste paragrafı yerine metin üzerinde durur. Bir liste öğesindeki girinti değişikliği gibi paragraf düzeyindeki herhangi bir biçimlendirme değişikliğini, sadece numaralandırmayı değil, eşleştirdiğini unutmayın. Bunları ayırt etmeniz gerekiyorsa kaydedilmiş belgeyi kontrol edin.

Numaralandırma Değişikliklerini Gözden Geçirme, Kabul Etme veya Reddetme

Numaralandırma değişiklikleri sıradan format revizyonları olduğundan, onları diğer revizyonlar gibi aynı şekilde ele alırsınız:

  • revisions.accept_all() düzenlenmiş liste biçimlendirmesini uygular. İlk örnekte, her iki öğe de madde işaretine dönüşür.
  • revisions.reject_all() orijinal biçimlendirmeyi korur, böylece öğeler 1. ve 2. olarak numaralı kalır.
  • Belgeyi kaydetmek, revizyonları izlenen değişiklikler olarak yazar, böylece gözden geçirenler dosyayı Microsoft Word’de açıp her değişikliği kendileri karar verebilir.

Ayrıca, önceki bölümdeki list_changes listesindeki yalnızca öğeler üzerinde, bireysel Revision nesnelerinde accept() veya reject() metodlarını çağırabilirsiniz.

Numaralandırma Değişikliklerini Ne Zaman Algılamalısınız

Liste numaralandırmasının gözden geçirenleriniz için anlam taşıdığı durumlarda seçeneği etkinleştirin. Hukuki ve politika belgeleri yaygın bir örnektir: maddelerin 1.‘den (a)‘ya yeniden numaralandırılması, diğer belgelerin onlara nasıl atıfta bulunduğunu değiştirir, bu yüzden bir gözden geçirenin bunu görmesi gerekir. Ayrıca belgeleri sistemler arasında taşıdığınızda ve liste numaralandırmasının değişmeden kaldığını doğrulamak istediğinizde de faydalıdır.

Sadece kelime seçimlerine önem veriyorsanız bunu kapalı bırakın. İçerik incelemeleri, çeviri kontrolleri ve metin düzeyindeki farklar, biçimlendirme revizyonları karışık olmadan okunması daha kolaydır.

Dikkat Edilmesi Gerekenler

  • ignore_formatting seçeneği geçersiz kılar. options.ignore_formatting = True ayarlarsanız, compare_list_definitions = True olsa bile numaralandırma değişiklikleri raporlanmaz.
  • Dosyalar karşılaştırmadan önce revizyon içermemelidir. Eğer belgelerden biri zaten izlenen değişikliklere sahipse, compare bir RuntimeError fırlatarak karşılaştırılan belgelerin revizyon içermemesi gerektiğini söyler. Mevcut revizyonları önce kabul edin veya reddedin. Bu aynı zamanda, bir belgenin zaten ilk karşılaştırmanın sonuçlarını taşıdığı bir ikinci karşılaştırma yapamayacağınız anlamına gelir; dosyaları her seferinde yeniden yükleyin.
  • Diğer revizyonlar hâlâ görünür. Bir liste öğesindeki eklenmiş veya silinmiş metin, seçenek açık ya da kapalı olsun raporlanır, bu yüzden numaralandırma değişikliklerini sözcük değişikliklerinden ayırmanız gerekiyorsa revision_type kontrol edin.

Sonraki Adımlar

Belgeleri Karşılaştır makalesi, Aspose.Words for Python belgelerinde, granülerlik, karşılaştırma hedefi ve yoksayma seçenekleri dahil diğer karşılaştırma ayarlarını kapsar.

SSS

  1. Aspose.Words, Word dosyalarını karşılaştırırken numaralandırma değişikliklerini neden tespit etmiyor? Varsayılan olarak, Aspose.Words Microsoft Word’ü izler ve liste tanımlarını, örneğin numaralandırma stili veya madde işareti karakteri gibi, karşılaştırmadan hariç tutar. Sayılardan madde işaretlerine değişen bir liste, compare_list_definitions özelliğini etkinleştirene kadar hiçbir revizyon üretmez.

  2. Python’da numaralandırma değişikliklerini nasıl algılarım? CompareOptions oluşturun, options.advanced_options.compare_list_definitions özelliğini True olarak ayarlayın ve seçenekleri Document.compare metoduna geçirin. Numaralandırması veya madde işareti değişen her liste paragrafı bir FORMAT_CHANGE revizyonu alır.

  3. Numaralandırma değişikliği ne tür bir revizyon oluşturur? Etkilenen her liste paragrafı RevisionType.FORMAT_CHANGE türünde bir revizyon alır. Onu kabul etmek, düzenlenmiş dosyanın liste biçimlendirmesini uygular, reddetmek ise orijinali korur.

  4. Seçenek ignore_formatting ile birlikte çalışıyor mu? Hayır. CompareOptions.ignore_formatting True olduğunda, numaralandırma değişiklikleri raporlanmaz, compare_list_definitions True olsa bile.

  5. Document.compare ne döndürür? Hiçbir şey. Farkları, üzerinde çağırdığınız belgeye revizyonlar olarak yazar, bu yüzden bunları belgenin revisions koleksiyonundan okursunuz.

  6. Aspose.Words for Python’in bu seçeneği eklediği sürüm hangisidir? AdvancedCompareOptions sınıfının compare_list_definitions özelliği Aspose.Words for Python via .NET 26.9 sürümünde eklendi.

Ücretsiz Lisans ve Destek Alın