發案人:曾先生
聯絡方式1:站內信
聯絡方式2:站內信聯繫後交換Skype,WhatsApp,Line或Telegram
所在地區 :海外(UTC+2)
有效時間:自宣告接案起16小時(時間認定詳附註)。
為保障接案者,本人聲明同一時間僅宣告一位接案者(會推文更新案件狀態),
亦不接受非接案者搶答。
但接案者若逾時,則視同專案完全失敗解約,本人將逕行與下一位有意者面談。
專案說明:修改newspaper3k程式庫(Python) 解決句子分隔問題。
詳見附註。
預算:NT$10000(估計合格接案者能在10個工時內解決)
接案者要求:
1. 有能力深入Python開源程式庫(newspaper3k)修正問題程式碼。
2. 熟悉 Python 下的新聞網頁處理,包括下列程式庫的使用:
newspaper3k(必), lxml(必), beautifulsoup4(選)
3. 工作成果須保密至2024-05-31 (有不便說明的理由 故無法立刻開源)
附註:
一、問題描述
* newspaper3k 是一個用來解析新聞網頁的 Python 程式庫。但它有一個問題:就是處理
英語新聞的時候,parse 出來的文章不時會發生前一句的句點跟下一句的首個字母之間漏
掉空白字元的情形。例如"...in the city.The mayor said..."這樣。這會導致兩個句子
被錯誤的辨識成同一句,句子長度加長、文法結構無法正確解析,進而對訓練諸多AI模型
帶來負面影響。
本專案希望藉由修改此程式庫,來消除上述問題。
下面是一些問題文章範例:
https://tinyurl.com/2cz9vxx5
https://bulawayo24.com/news/national/169936
https://tinyurl.com/bfdk3kdn
https://www.jpost.com/Opinion/Another-tack-Sympathy-for-the-scarecrow-415892
下列程式碼可以驗證上述文章經newspaper3k解析後,部份句子之間遺漏空白。
===========================================================
from newspaper import Article
url = "" # 注意不要填入tinyurl縮過的網址
article = Article(url=url, fetch_images=False)
article.download()
article.parse() # 這個函式的內部邏輯需要修正
print(article.text)
===========================================================
二、解決方案要求
1. 接案者須將成果上傳至發案者的GitHub或GitLab,並新增一個pull request。
聯繫時發案者會給予存取權限,成功設定後宣告計時開始。
專案完成時刻,則以接案者通知發案者的時刻認定。
2. 通知發案者專案完成後,須立即Demo,解釋程式碼修正了哪些邏輯,
並以單元測試或直接執行等適當方式證明解方有效。Demo出錯可容許當場
做出3分鐘以內的小修正。如3分鐘內未能解決,視同專案完全失敗。
3. 上面提供的4個案例皆須成功解析,否則視同專案完全失敗。
4. 恕不能接受下列解決方案:
(A) 用類似 "[a-z0-9]\.[A-Z0-9]" 的 regex 去直接拆分解析後的文句:
團隊已經確認過,這種事後解法基本不能接受。因為還是太容易誤拆 v.100 或
K.v.K 之類的名詞,造成模型的正確性比原本更糟。
(B) 更換library:目前團隊已有其他修正建立在newspaper3k上
(C) 使用AI模型:我們每天處理幾十萬篇文章,如此算力成本太高。
(D) 解方能正確的分隔句子,但文章其他部份出現原本沒有的損壞。
(E) 最後,雖然有能力修正開源程式庫的先進顯然不會這樣取巧,但下面這點還是
要提一下,以防不必要的糾紛:
只為了通過單元測試,而根據特定網頁或特定的domain name去做個案處理的方式,
是不可接受的。例如:if "jpost.com" in article.url,這種針對單一網站的處理
邏輯,就不可接受。
當然,如果認定某一類別的網頁結構是元兇,是可以撰寫特殊邏輯去處理的。但這個結構
必須能夠適用複數的新聞網站。舉兩個例子:
例1:假設您認定 <br /> 沒有被正確處理,那麼在article.parse()的內部邏輯某處,
把這個tag取代成換行符號是OK的,因為顯然許多新聞網頁都包含<br />的元素
(這邊只是舉例....我其實看過這部份的邏輯但沒發現它做錯)。
例2:找到 itemprop="articleBody" 之類的區塊做特殊處理,也是屬於一般性的邏輯
感謝您的耐心閱讀!