尋求關於如何從多個文本文件中挖掘項目以建立字典的建議。Python從多個txt文件解析文本
該文本文件:https://pastebin.com/Npcp3HCM
手動變換成這個所需的數據結構:https://drive.google.com/file/d/0B2AJ7rliSQubV0J2Z0d0eXF3bW8/view
有數千個這樣的文本文件,並且它們可以具有如在這些實施例中所示不同的部分標題:
我開始通過閱讀文件
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])
我的想法是,尋找在那裏節標題中存在的行號,並嘗試提取這些行號之間的內容,然後剝離出像虛線分隔。這並沒有奏效,我試圖創建一個這樣的字典,以便我可以在以後運行各種自然語言處理算法的採購項目。
{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]}
}
}
}
挑戰是不同的文件可能有不同的標題和標題數量。但總會有一個部分叫做「Presentation」,很可能會有「Question and Answer」部分。這些章節標題總是由一串等號表示。不同說話者的內容總是用一串破折號分開。 Q &的「語音指令」部分用方括號中的數字表示。參與者總是在文件的開頭用星號標出,他們的名字總是在下一行。
任何有關如何解析文本文件的建議表示讚賞。理想的幫助是提供關於如何爲每個文件生成這樣的字典(或其他合適的數據結構)的指導,然後可以將其寫入數據庫。
感謝
- 編輯 -
其中的一個文件看起來是這樣的:https://pastebin.com/MSvmHb2e
在其中的「問題&答案」部分錯誤標註爲「演示」並沒有其他「問題&答案」部分。
和最後的示例文本:https://pastebin.com/jr9WfpV8
我不會建議你到所有的文本數據存儲在一個單一的'dict'對象,正如你所提到的,可能會有大量的文本文件被解析,所以在運行時,python進程需要更多的時間來更新'dict'對象,因爲'dict'對象的大小增加了,並且如果你擁有OutOfMemory一些真正巨大的文件需要處理,我敢打賭一些'DBMS'來存儲這種數據。 – ZdaR
@ZdaR感謝您的建議。在閱讀您的評論後,我決定使用數據庫。我目前正在研究sqlalchemy – samkhan13
錯誤標籤不會很容易解決。您將不得不使用ML技術來構建分類器,該技術會將某個部分分類爲「Presentation」或「Question&Answer」部分,因爲沒有可靠的線索(使用手工制定的規則無法獲得大量模式識別)正確的100%)出現在文本中。 – entrophy