Szuka porady, jak kopać przedmioty z wielu plików tekstowych, aby zbudować słownik.Python przetwarza tekst z wielu plików txt
Ten plik tekstowy: https://pastebin.com/Npcp3HCM
został ręcznie przekształcona to wymagane struktury danych: https://drive.google.com/file/d/0B2AJ7rliSQubV0J2Z0d0eXF3bW8/view
Istnieją tysiące takich plików tekstowych i mogą mieć różne nagłówki sekcji, jak pokazano na poniższych przykładach:
Zacząłem poprzez czytanie plików
from glob import glob
txtPth = '../tr-txt/*.txt'
txtFiles = glob(txtPth)
with open(txtFiles[0],'r') as tf:
allLines = [line.rstrip() for line in tf]
sectionHeading = ['Corporate Participants',
'Conference Call Participiants',
'Presentation',
'Questions and Answers']
for lineNum, line in enumerate(allLines):
if line in sectionHeading:
print(lineNum,allLines[lineNum])
Mój pomysł był szukać numerów linii, gdzie istniały Nagłówki sekcji i spróbować wyodrębnić zawartość między tymi numerami linii, a następnie rozebrać się separatory jak myślniki . To nie zadziałało i utknąłem w próbach stworzenia tego rodzaju słownika, aby później móc uruchomić różne algorytmy przetwarzania języka naturalnego na przedmiotach wydobywanych.
{file-name1:{
{date-time:[string]},
{corporate-name:[string]},
{corporate-participants:[name1,name2,name3]},
{call-participants:[name4,name5]},
{section-headings:{
{heading1:[
{name1:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name3:[speechOrderNum, text-content]}],
{heading2:[
{name1:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name3:[speechOrderNum, text-content]},
{name2:[speechOrderNum, text-content]},
{name1:[speechOrderNum, text-content]},
{name4:[speechOrderNum, text-content]}],
{heading3:[text-content]},
{heading4:[text-content]}
}
}
}
Wyzwaniem jest to, że różne pliki mogą mieć różne nagłówki i liczbę nagłówków. Ale zawsze będzie sekcja "Prezentacja" i najprawdopodobniej sekcja "Pytanie i odpowiedź". Te nagłówki sekcji są zawsze oddzielone ciągiem równych znaków. Treść innego głośnika jest zawsze oddzielona ciągiem kresek. "Kolejność mowy" dla Q & Sekcja jest oznaczona liczbą w nawiasach kwadratowych. Uczestnicy są zawsze wskazani na początku dokumentu gwiazdkami przed ich nazwiskiem, a ich kafelek zawsze znajduje się w następnej linii.
Wszelkie sugestie dotyczące przetwarzania plików tekstowych są mile widziane. Idealną pomocą byłoby dostarczenie wskazówek, jak stworzyć taki słownik (lub inną odpowiednią strukturę danych) dla każdego pliku, który można następnie zapisać w bazie danych.
Dzięki
--EDIT--
Jeden z plików wygląda następująco: https://pastebin.com/MSvmHb2e
w którym sekcja „Pytanie & Answer” jest błędnie jako „prezentacja” i tam nie jest inne "Pytanie & Odpowiedź" sekcja.
A końcowy przykładowy tekst: https://pastebin.com/jr9WfpV8
Nie proponujemy, aby przechowywać wszystkie dane tekstowe w jednym 'dict' obiektu, jak już wspomniano, że może istnieć duża liczba plików tekstowych do przeanalizowania, więc w czasie wykonywania proces Pythona wymagałby więcej czasu na aktualizację obiektu 'dict' w miarę wzrostu rozmiaru obiektu' dict' i mógłby uzyskać OutOfMemory, jeśli masz kilka naprawdę dużych plików do przetworzenia, chciałbym postawić na "DBMS" do przechowywania tego rodzaju danych. – ZdaR
@ZdaR dziękuję za poradę. po przeczytaniu twojego komentarza zdecydowałem się pracować z bazą danych. Obecnie zajmuję się sqlalchemy – samkhan13
Mylące oznakowanie nie będzie tak łatwe do rozwiązania. Będziesz musiał zbudować klasyfikator, używając technik ML, które klasyfikują sekcję jako sekcję "Prezentacja" lub "Pytanie i odpowiedź", ponieważ nie ma gwarantowanych wskazówek (żadna ilość rozpoznawania wzorca przy użyciu ręcznie wykonywanych reguł nie spowoduje tego prawo 100%) obecne w tekście. – entrophy