回答
很難知道沒有具體的代碼來引用,但一個良好的開端可能是Natural Language Toolkit for Python。
該文件可能是GB大小,行數可能是幾百萬。輸出文件不應該帶有頻率爲1的任何字。換句話說,這些罕見的單詞只是從文件中刪除,其他的都會保持不變。最好的問候, –
我認爲@sampson-chen的答案會對你最有效。 –
你必須通過文件做2遍:
在通1:
- 建立一個使用單詞作爲鍵和它們的出現爲值的字典(即你讀每次總之,加1到它在字典中值)
- 然後預處理列表中刪除所有鍵與大於1的值,這是現在你的「黑名單」
在通2:
- 再次通讀文件,並刪除任何在黑名單中匹配的詞。
運行時間:
- 線性時間閱讀兩道文件。
- 它需要O(1)在通1.
- 每個單詞添加到詞典/遞增其值這需要O(n)的預過程的字典入黑名單。
- 它需要O(1)爲黑名單查找在通2.
O(n)的複雜性
第2遍再次通過文件,所以O(N)也像第1遍。 –
字典操作是['O(1)'](http://wiki.python.org/moin/TimeComplexity#dict)。 – ovgolovin
「在兩次通過中讀取文件的線性時間」 –
2穿過該文件是絕對必要的。但是,如果罕見的詞語非常罕見,那麼您可以在第二遍中跳過標記大部分文件。首先逐字地傳遞文件並構建一個字典,其中包含一次遇到的單詞的找到位置或兩次遇到單詞的佔位符值。
MULTI_WORD = -1
word_locations = {}
for pos, word in tokenize(input_file):
if word not in word_locations:
word_locations[word] = pos
else:
word_locations[word] = MULTI_WORD
然後你就可以過濾掉,你需要做編輯的位置,做一個普通的副本上休息:
edit_points = [(pos, len(word)) for word, pos in word_locations.iteritems()
if pos != MULTI_WORD]
start_pos = 0
for end_pos, edit_length in edit_points:
input_file.seek(start_pos)
output_file.write(input_file.read(end_pos - start_pos))
start_pos = end_pos + edit_length
input_file.seek(start_pos)
output_file.write(input_file.read())
您可能需要一對夫婦更優化的,像塊明智副本程序來節省內存開銷和沒有編輯點的特殊情況。
你coud也使用內存映射,然後使用seek刪除單詞。 – root
- 1. 將英文單詞分爲罕見和常見
- 2. php for循環刪除常見單詞
- 3. Admob崩潰但非常罕見
- 4. 從文件中刪除單詞
- 5. 刪除常見的英文單詞策略
- 6. 刪除兩個文件中的罕見行,但保留文件結構
- 7. 刪除python中的非英語單詞
- 8. Wordcount文件的常見詞
- 9. 刪除文件中的特定單詞
- 10. 根據條件從非常大的表中刪除舊記錄
- 11. 如何從文本中刪除非單詞字符?
- 12. 文本中的常見單詞
- 13. 如何處理tf-idf中非常罕見的術語?
- 14. 從NSString中刪除單詞
- 15. 追溯從Mercurial中刪除常見的被忽略的文件?
- 16. 從文本中刪除單詞/數字
- 17. 從php/mysql搜索程序中刪除常見詞
- 18. MySQL Inndob從非常大的數據庫中刪除/清除行
- 19. .net中的罕見異常與Twitterizer
- 20. 通過從文件名中刪除單詞重命名文件
- 21. 查找兩個大型非結構化文本文件之間的常見詞
- 22. 如何從ant中的文件中刪除重複的單詞?
- 23. 在文本文件python中的5個最常見的單詞
- 24. Fos Elastica從搜索查詢中刪除常見單詞(或等等..)
- 25. 快速搜索非常罕見的領域在一個巨大的mongodb集合
- 26. 如何從Perl的大文件中刪除非唯一的行?
- 27. 從文件中刪除停用詞
- 28. 從文本描述中簡單地過濾出常見單詞
- 29. 用Swift從文本文件中刪除單詞
- 30. 如何從文本文件中刪除和統計單詞?
「非常大」有多大 – mgilson
文件是否需要保持順序?列表是否已排序? –
nltk字數 - >得到所有單詞有一次出現 - >用正則表達式去除 – swasheck