我正在對 SEC 檔案(例如 10-K)進行文本分析,我所擁有的檔案是完整的提交檔案。完整的提交檔案包括 10-K 以及其他一些檔案。每個檔案都位于標簽‘<DOCUMENT>’
和‘</DOCUMENT>’
.
我想要的是:僅在第一個實體之前計算 10-K 中的單詞數‘</DOCUMENT>’
我想如何完成它:我想使用一個 for 回圈,用一個正則運算式 (regex_end10k) 來指示在哪里停止 for 回圈。
發生了什么:無論我在哪里放置正則運算式匹配中斷,程式都會計算整個檔案中的所有單詞。我沒有錯誤,但是我無法得到想要的結果。
我是怎么知道的:我手動修剪了一份檔案,同時保留了完整的檔案(結果如下)。當我在第一個實體之后手動洗掉不需要的檔案時‘</DOCUMENT>’
,我減少了大約 750,000 個單詞。
電流輸出
注意:顯然我沒有足夠的聲望在我的帖子中嵌入螢屏截圖;它默認為鏈接。
我嘗試過的:放置正則運算式匹配中斷的位置的幾種變體。無論如何,它幾乎總是計算整個檔案。我相信這兩個功能可以在整個檔案中執行。我曾嘗試將 break 陳述句放入其中,get_text_from_html()
以便count_words()
僅在 10-K 上執行,但我沒有運氣。
下面的代碼是一個更大的函式的片段。它的目的是 (1) 去除 html 標簽和 (2) 計算文本中的單詞數。如果我可以提供任何其他資訊,請告訴我,我會更新我的帖子。
剩余的代碼(未顯示)從標簽‘<SEC-HEADER>’
和之間的標題部分提取公司和報告識別符號(例如,“檔案”或“cik”)‘</SEC-HEADER>’
。使用相同的邏輯,在提取頭資訊時,我使用了正則運算式匹配中斷邏輯,它完美地作業。當我嘗試計算單詞數以及如何更正我的代碼時,我需要幫助來理解為什么相同的邏輯不起作用。任何幫助表示贊賞。
regex_end10k = re.compile(r'</DOCUMENT>', re.IGNORECASE)
for line in f:
def get_text_from_html(html:str):
doc = lxml.html.fromstring(html)
for table in doc.xpath('.//table'): # optional: removes tables from HTML source code
table.getparent().remove(table)
for tag in ["a", "p", "div", "br", "h1", "h2", "h3", "h4", "h5"]:
for element in doc.findall(tag):
if element.text:
element.text = element.text "\n"
else:
element.text = "\n"
return doc.text_content()
to_clean = f.read()
clean = get_text_from_html(to_clean)
#print(clean[:20000])
def count_words(clean):
words = re.findall(r"\b[a-zA-Z\'\-] \b",clean)
word_count = len(words)
return word_count
header_vars["words"] = count_words(clean)
match = regex_end10k.search(line) # This should do it, but it doesn't.
if match:
break
uj5u.com熱心網友回復:
您不需要regx,只需拆分您的原始字串,然后在計算單詞之前的部分,上面的簡單示例:
text = 'Text before <DOCUMENT> text after'
splited_text = text.split('<DOCUMENT>')
splited_text_before = splited_text[0]
count_words = len(splited_text_before.split())
print(splited_text_before)
print(count_words)
輸出
Text before
2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/401018.html
上一篇:for回圈的時間復雜度