karanlık proxyscrape logo

Veri ayrıştırma nedir?

Mayıs-00-20215 dakika okuma

Data Parsing is a term that you often come across when you work with large quantities of data, especially for those who scrape data from the web as well as software engineers. However, data parsing is a topic that needs to be discussed in greater depth. For instance, what exactly is data parsing, and how

Veri ayrıştırma, özellikle web'den veri kazıyanlar ve yazılım mühendisleri için büyük miktarlarda veri ile çalışırken sıklıkla karşılaştığınız bir terimdir. Ancak, veri ayrıştırma daha derinlemesine tartışılması gereken bir konudur. Örneğin, veri ayrıştırma tam olarak nedir ve bunu gerçek dünyada nasıl uygularsınız?

Bu makale yukarıdaki tüm soruları yanıtlayacak ve veri ayrıştırma ile ilgili önemli terminolojilere genel bir bakış sağlayacaktır.

Ayrıştırma ne anlama geliyor?

Web kazıma işleminden büyük miktarlarda veri elde ettiğinizde, bunlar HTML formatındadır. Ne yazık ki bu, programcı olmayanlar için okunabilir bir formatta değildir. Bu nedenle, veri bilimcilerin analizine uygun hale getirmek için veriler üzerinde insan tarafından okunabilir bir formatta daha fazla çalışma yapmanız gerekir. Ayrıştırma işleminde bu ağır işin çoğunu gerçekleştiren ayrıştırıcıdır.

Bir veri ayrıştırıcı ne yapar?

Ayrıştırıcı, bir formattaki veriyi başka bir formattaki veriye dönüştürür. Örneğin, ayrıştırıcı, kazıma yoluyla elde ettiğiniz HTML verilerini JSON, CSV ve hatta bir tabloya dönüştürür, böylece okuyabileceğiniz ve analiz edebileceğiniz bir formatta olur. Ayrıştırıcının belirli bir veri formatına bağlı olmadığını da belirtmek gerekir.

Ayrıştırıcı her HTML dizesini ayrıştırmaz çünkü iyi bir ayrıştırıcı HTML etiketlerindeki gerekli verileri diğerlerinden ayıracaktır.

Ayrıştırıcı kullanan farklı teknolojiler

Önceki bölümde de belirtildiği gibi, ayrıştırıcı belirli bir teknolojiye bağlı olmadığından, doğası gereği son derece esnektir. Bu nedenle çok çeşitli teknolojiler bunları kullanır:

Komut Dosyası Dilleri- bunlar, bir dosya içindeki bir dizi komuta dayalı olarak çalıştıkları için yürütme için bir derleyiciye ihtiyaç duymayan dillerdir. Tipik örnekleri PHP, Python ve JavaScript'tir.

Java ve diğer programlama dilleri- Java gibi üst düzey programlama dilleri, kaynak kodu Assembly diline dönüştürmek için bir derleyici kullanır. Ayrıştırıcı, kaynak kodun dahili bir temsilini oluşturan bu derleyicilerin önemli bir bileşenidir.

HTML ve XML- HTML durumunda ayrıştırıcı, başlık, başlıklar, paragraflar vb. gibi HTML etiketlerindeki metni çıkarır. XML ayrıştırıcı ise XML belgelerinin okunmasını ve manipüle edilmesini kolaylaştıran bir kütüphanedir.

SQL ve Veritabanı dilleri- Örneğin SQL ayrıştırıcı, bir SQL sorgusunu ayrıştırır ve SQL sorgusunda tanımlanan alanları oluşturur.

Modelleme dilleri - modelleme dillerindeki ayrıştırıcı, geliştiricilerin, analistlerin ve paydaşların modellenmekte olan sistemin yapısını anlamalarını sağlar.

Etkileşimli veri dilleri- uzay bilimleri ve güneş fiziği de dahil olmak üzere büyük miktarda verinin etkileşimli olarak işlenmesinde kullanılır. 

Neden veri ayrıştırmaya ihtiyacınız var?

Ayrıştırma ihtiyacının birincil nedeni, çeşitli varlıkların farklı formatlarda verilere ihtiyaç duymasıdır. Bu nedenle ayrıştırma, verilerin bir insanın veya bazı durumlarda yazılımın anlayabileceği şekilde dönüştürülmesini sağlar. İkincisinin önemli bir örneği bilgisayar programlarıdır. İlk olarak, insanlar bunları günlük olarak kullandığımız İngilizce gibi doğal bir dile benzer yüksek seviyeli bir dille anlayabilecekleri bir formatta yazarlar. Daha sonra bilgisayarlar bunları, bilgisayarların anlayabileceği makine düzeyindeki koda kadar bir forma çevirir.

Ayrıştırma, iki farklı yazılım arasında iletişimin gerekli olduğu durumlar için de gereklidir - örneğin, bir sınıfın serileştirilmesi ve serileştirilmesinin kaldırılması.

Ayrıştırma terminolojisi ve ayrıştırıcının yapısı

Bu noktaya kadar, veri ayrıştırmanın temel kavramlarını biliyorsunuz. Şimdi veri ayrıştırma ile ilgili önemli kavramları ve ayrıştırıcının nasıl çalıştığını keşfetme zamanı. 

Terminoloji

  1. Düzenli ifadeler

Düzenli ifadeler, belirli bir kalıbı tanımlayan bir dizi karakterdir. En yaygın olarak üst düzey ve komut dosyası dilleri tarafından bir e-posta adresini veya doğum tarihini doğrulamak için kullanılırlar. Veri ayrıştırma için uygun olmadıkları düşünülse de, basit girdileri ayrıştırmak için hala kullanılabilirler. Bu yanlış kanı, bazı programcıların düzenli ifadeleri kullanılmamaları gereken durumlarda bile her ayrıştırma görevi için kullanmalarından kaynaklanmaktadır. Bu gibi durumlarda sonuç, bir araya getirilmiş bir dizi düzenli ifadedir.

Düzenli ifadeleri, düzenli diller olarak da bilinen bazı basit programlama dillerini ayrıştırmak için kullanabilirsiniz. Ancak bu, basit bir dil olarak kabul edebileceğiniz HTML'yi içermez. Bunun nedeni, HTML etiketlerinin içinde herhangi bir sayıda rastgele etiketle karşılaşacak olmanızdır. Ayrıca, gramerine göre, normal dil olarak sınıflandıramayacağınız özyinelemeli ve iç içe geçmiş öğelere sahiptir. Bu nedenle ne kadar zeki olursanız olun bunları ayrıştıramazsınız. 

  1. Gramerler

Gramer, bir dili sözdizimsel olarak tanımlayan kurallar bütünüdür. Bu nedenle, bir dilin anlambilimine değil, yalnızca sözdizimine uygulanır. Başka bir deyişle, gramer bir dilin yapısına uygulanır, anlamına değil. Aşağıdaki örneği ele alalım:

HI: "HI"

ADI: [a-zA-z] +

Selamlama: MERHABA İSİM

Yukarıdaki kod parçası için olası çıktılardan ikisi "HI SARA" veya "HI Coding" olabilir. Dilin yapısı söz konusu olduğunda, her ikisi de doğrudur. Ancak ikinci çıktıda "Coding" bir kişi adı olmadığı için anlamsal olarak yanlıştır.

Dilbilgisinin Anatomisi

Dilbilgisinin anatomisine Backus-Naur Formu (BNF) gibi yaygın olarak kullanılan formlarla bakabiliriz. Bu formun Genişletilmiş Backus-Naur Formu gibi varyantları vardır ve tekrarı gösterir. BNF'nin bir başka çeşidi de Artırılmış Backus-Naur Formudur. Çift yönlü iletişim protokollerini tanımlarken kullanılır.

Backus-Naur Formunda tipik bir kural kullandığınızda, aşağıdaki gibi görünür:

<symbol> : : _expression_

The <symbol> is nonterminal, which means you can replace it with elements on the right,  _expression_. The _expression_ could contain terminal symbols as well as nonterminal symbols. 

Şimdi terminal sembollerin ne olduğunu soruyor olabilirsiniz? Bunlar, gramerin herhangi bir bileşeninde sembol olarak görünmeyenlerdir. Tipik bir terminal sembolü örneği "Program" gibi bir karakter dizisidir.

Yukarıdaki gibi bir kural teknik olarak nonterminal ve nonterminal grubu ile sağdaki terminal arasındaki dönüşümü tanımladığı için üretim kuralı olarak adlandırılabilir.

Gramer Türleri 

İki tür gramer vardır ve bunlar Düzenli gramer ve bağlamdan bağımsız gramerlerdir. Düzenli gramer ortak bir dil tanımlamak için kullanılır. Parsing Expression Grammar (PEG) olarak bilinen ve bağlamdan bağımsız dilleri temsil eden daha yeni bir gramer türü de vardır ve bunlar da bağlamdan bağımsız gramerler kadar güçlüdür. Her neyse, iki tür arasındaki fark gösterime ve kuralların nasıl uygulandığına bağlıdır.

İki gramer arasında ayrım yapmanın daha kolay bir yolu _ifade_ veya kuralın sağ tarafı şeklinde olabilir:

  • Boş bir dize
  • Tek bir terminal sembolü
  • Tek bir terminal sembolünün ardından terminal olmayan bir sembol gelir.

Gerçekte, bunu söylemek yapmaktan daha kolaydır çünkü belirli bir araç bir tanımda daha fazla terminal sembolüne izin verebilir. Daha sonra ifadeyi yukarıdaki durumlardan herhangi birine ait olan doğru bir ifade dizisine dönüştürebilir.

Yani yazdığınız kaba bir ifade bile doğal bir dille uyumlu olmasa da uygun bir forma dönüştürülecektir.

Ayrıştırıcının bileşenleri

Ayrıştırıcı, az önce tartıştığımız gramer kurallarına uygun bir programlama dilindeki bir dizi sembolü analiz etmekten sorumlu olduğundan, ayrıştırıcının işlevselliğini iki aşamalı bir sürece ayırabiliriz. Tipik olarak ayrıştırıcıya yapılandırılmamış verileri programlı olarak okuma, analiz etme ve yapılandırılmış bir biçime dönüştürme talimatı verilir.

Bir ayrıştırıcıyı oluşturan iki ana bileşen sözcüksel analiz ve sözdizimsel analizdir. Buna ek olarak, bazı ayrıştırıcılar yapılandırılmış verileri alan ve bunları pozitif veya negatif, tam veya eksik olarak filtreleyen bir semantik analiz bileşeni de uygular. Bu işlemin veri analizi sürecini daha da geliştirdiğini düşünseniz de, senaryo her zaman böyle değildir.  

Semantik analiz, insan semantik analizinin daha çok tercih edilen uygulamaları nedeniyle çoğu ayrıştırıcıda yerleşik değildir. Bu nedenle anlamsal analiz ek bir adım olmalı ve eğer gerçekleştirmeyi planlıyorsanız iş hedeflerinizi tamamlamalıdır.

Şimdi de ayrıştırıcının iki ana sürecini ele alalım.

  1. Sözcüksel Analiz

Bu işlem, tarayıcılar veya belirteçler olarak da adlandırılan Lexar tarafından gerçekleştirilir ve görevleri bir dizi ham yapılandırılmamış veriyi veya karakteri belirteçlere dönüştürmektir. Genellikle ayrıştırıcıya giren bu karakter dizisi HTML formatındadır. Daha sonra ayrıştırıcı, anahtar kelimeler, tanımlayıcılar ve sınırlayıcılar dahil olmak üzere sözcük birimlerini kullanarak belirteçler oluşturur. Aynı zamanda ayrıştırıcı, giriş bölümünde değindiğimiz sözcüksel olarak alakasız verileri göz ardı eder. Örneğin, bir HTML belgesi içindeki boşlukları ve yorumları içerirler.

Ayrıştırıcı, sözcüksel işlem sırasında ilgisiz belirteçleri attıktan sonra, ayrıştırma işleminin geri kalanı sözdizimsel analizle ilgilenir.

  1. Sözdizimsel Analiz

Veri ayrıştırmanın bu aşaması bir ayrıştırma ağacı oluşturmaktan oluşur. Bu, ayrıştırıcının belirteçleri oluşturduktan sonra bunları bir ağaç halinde düzenlemesi anlamına gelir. Bu işlem sırasında, alakasız belirteçler de ağacın kendi iç içe geçme yapısına dahil edilir. Alakasız belirteçler arasında parantezler, noktalı virgüller ve küme parantezleri bulunur.

Bunu daha iyi anlayabilmeniz için basit bir matematik denklemi ile açıklayalım: (a*2)+4

  1. ayrıştırıcının Lexer'ı daha sonra bunları aşağıdaki gibi belirteçlere ayıracaktır:

( => Parantez

a => Değer

* => Çarpma

2 => Değer

 )=> Parantez

+ => Artı

4 => Değer

  1. Bundan sonra ayrıştırma ağacı aşağıdaki gibi oluşturulacaktır:

    Ayrıştırıcı HTML öğelerinden veri çıkarırken de aynı prensibi izleyecektir.

Şirket içi ayrıştırıcı mı yoksa dış kaynak ayrıştırıcı mı?

Artık bir ayrıştırıcının temel yönlerini anladınız. Şimdi sıra, ayrıştırıcınızı kendiniz mi oluşturacaksınız yoksa dışarıdan mı temin edeceksiniz gibi heyecan verici bir konuya geldi. Öncelikle, her bir yöntemin artı ve eksilerini inceleyelim. 

Kurum içi ayrıştırıcının artıları

Kurum içi bir ayrıştırıcı oluşturmanın size sayısız faydası vardır. En önemli avantajlardan biri, teknik özellikler üzerinde daha fazla kontrole sahip olmanızdır. Buna ek olarak, ayrıştırıcılar herhangi bir veri formatıyla sınırlı olmadığından, farklı veri formatlarını karşılamak için özelleştirilebilir hale getirme lüksüne sahipsiniz. 

Diğer önemli avantajlardan bazıları maliyet tasarrufu ve dahili ayrıştırıcının güncellenmesi ve bakımı üzerinde kontrol sahibi olmaktır. 

Kurum içi ayrıştırıcının eksileri

Kurum içi ayrıştırıcının da tuzakları yok değildir. Önemli dezavantajlardan biri, bakım, güncelleme ve testler üzerinde önemli bir kontrole sahip olduğunuzda değerli zamanınızın çoğunu tüketecek olmasıdır. Diğer bir dezavantaj ise tüm verilerinizi ihtiyaç duyduğunuzdan daha hızlı ayrıştırmak için güçlü bir sunucu satın alıp alamayacağınızdır. Son olarak, ayrıştırıcıyı oluşturmak ve bu konuda eğitim vermek için tüm kurum içi personelinizi eğitmeniz gerekecektir. 

Dış kaynak ayrıştırıcının artıları

Bir ayrıştırıcı için dış kaynak kullandığınızda, satın alan şirket size sunucular ve ayrıştırıcı da dahil olmak üzere tüm görevleri sağlayacağından, insan kaynakları için harcadığınız paradan tasarruf edersiniz. Buna ek olarak, ayrıştırıcıyı geliştiren şirketin piyasaya sürmeden önce tüm senaryoları test etme olasılığı daha yüksek olduğundan, önemli hatalarla karşılaşma olasılığınız daha düşük olacaktır.

Herhangi bir hata ortaya çıkarsa, ayrıştırıcıyı satın aldığınız şirketten teknik destek alabilirsiniz. Ayrıca, en iyi ayrıştırıcıyı oluşturmaya karar verme süreci dış kaynak kullanımı ile gerçekleşeceğinden zamandan da tasarruf edeceksiniz. 

Dış kaynak ayrıştırıcının eksileri

Dış kaynak kullanımının çok sayıda faydası olmasına rağmen, dezavantajları da vardır. Başlıca dezavantajlar özelleştirilebilirlik ve maliyet şeklinde ortaya çıkmaktadır. Ayrıştırma şirketi tüm işlevselliği oluşturduğundan, daha fazla maliyete neden olacaktır. Buna ek olarak, ayrıştırıcı işlevselliği üzerindeki tam kontrolünüz sınırlı olacaktır.

Sonuç

Bu uzun makalede, ayrıştırıcının nasıl çalıştığını ve genel olarak veri ayrıştırma sürecini ve temellerini öğrendiniz. Veri ayrıştırma uzun ve karmaşık bir süreçtir. Veri ayrıştırma işlemini uygulamalı olarak deneyimleme şansı bulduğunuzda, artık bu işlemi etkili bir şekilde gerçekleştirme konusunda zengin bir bilgi birikimine sahip olursunuz.

Bu bilgiyi etkin bir şekilde kullanacağınızı umuyoruz.