ParsePdf With Regex
Technology | C# |
---|---|
Editor of the Page | Latif 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.
}