🎐

ParsePdf With Regex

TechnologyC#
Editor of the PageLatif Bahadır ALTUN
public Dictionary<int, string> GetRegexListFromPdf(string regex, string filename = null, byte[] fileBytes = null)
        {
            Dictionary<int, string> sentence = fileBytes == null ? ParsePdfFromFile(filename) : ParsePdfFromStream(fileBytes); // sayfa sayfa pdf içeriği çekildi. (dosya yolu veya stream şeklinde)

            Dictionary<int, string> regexResultList = new Dictionary<int, string>(); // regex sorgusu sonrası sayfa etiketiyle tc'nin tutulacağı liste oluşturuldu. (key-value pair)

            foreach (KeyValuePair<int, string> item in sentence) // her sayfanın içeriği içinde gezildi.
            {
                List<string> wordList = // gezilen sayfadaki tc regex sorgusu sonrası wordlist parametresinde tutuldu.
                item.Value // tc
                .Replace("\n", "") // sayfa içeriğindeki alta satır inme tagleri kaldırıldı.
                .Replace(",", "") // sayfa içeriğindeki virgüller kaldırıldı.
                .Replace(".", "") // sayfa içeriğindeki noktalar kaldırıldı.
                .Split(" ") // sayfa içeriği boşluklara göre ayrıştırıldı.
                .Where(x => Regex.IsMatch(x, regex)) // kelime bazlı olarak regex sorgusu
                .ToList(); // listelenerek wordlist'e atıldı

                foreach (string word in wordList) // wordlist içerisinde gezerek aynı tc birden fazla ise eklenmeyecek.
                    if (!regexResultList.Values.Contains(word))
                        regexResultList.Add((item.Key), word); // sayfa numarası ile tcnin tutulduğu nihai listeye atama yapıldı.

            }
            return regexResultList; // tc ve bulunduğu sayfa döndürülür.
        }

        public Dictionary<int, string> ParsePdfFromFile(string fileName) // Kayıtlı dosyayı okuma
        {
            if (!File.Exists(fileName)) // dosya yoksa hata
                throw new FileNotFoundException(fileName + " dosyası bulunamadı.");
            using PdfReader reader = new PdfReader(fileName); // pdf dosya yolundan okundu
            return GetPdfContent(reader); // pdf içeriği çekilir.
        }

        public Dictionary<int, string> ParsePdfFromStream(byte[] fileBytes)
        {
            using PdfReader reader = new PdfReader(fileBytes); // pdf havada okunmaya başlanır.
            return GetPdfContent(reader); // pdf içeriği çekilir.
        }

        public Dictionary<int, string> GetPdfContent(PdfReader reader) // pdf içeriği çekme metodu
        {
            Dictionary<int, string> pageValuePair = new Dictionary<int, string>(); // sayfa numarası - içerik listesi (key-value pair)

            ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); // pdf içeriğini okuma referansı.
            for (int page = 0; page < reader.NumberOfPages; page++) // gelen pdfdeki sayfalar gezilir.
            {
                string text = PdfTextExtractor.GetTextFromPage(reader, page + 1, strategy); // sayfa içerisideki text alınır.
                if (!string.IsNullOrWhiteSpace(text)) // çekilen text boş değilse
                {
                    pageValuePair.Add((page + 1), Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(text)))); // sayfa numarası ve içerik listeye eklenir.
                }
            }

            return pageValuePair; // sayfa numarası - içerik döndürülür.
        }