2011-02-10 2 views
3

Открываю файл с помощью python, чтобы узнать, присутствует ли в открытом файле предопределенный набор слов. Я взял предопределенный набор слов в списке и открыл файл, который должен быть протестирован. Теперь есть способ извлечь слова в python, а не в строки. Это облегчает мою работу.Извлечь слова из файла

ответ

7
import re 

def get_words_from_string(s): 
    return set(re.findall(re.compile('\w+'), s.lower())) 

def get_words_from_file(fname): 
    with open(fname, 'rb') as inf: 
     return get_words_from_string(inf.read()) 

def all_words(needle, haystack): 
    return set(needle).issubset(set(haystack)) 

def any_words(needle, haystack): 
    return set(needle).intersection(set(haystack)) 

search_words = get_words_from_string("This is my test") 
find_in = get_words_from_string("If this were my test, I is passing") 

print any_words(search_words, find_in) 

print all_words(search_words, find_in) 

возвращает

set(['this', 'test', 'is', 'my']) 
True 
+0

идеальное решение ... но что, если файл слишком large..any умное решение – nikhil

+2

(пожав плечами) уверен, разбор файла строка за строкой, накапливая словосочетание, как вы идете. –

1

Вы можете сделать несколько вещей

  • file.readlines вызова() и разделить весь текст на нужный разделитель, если ваш текст не большой
  • вызовов чтения() и сделать это байты в время

Отъезд pydocs для файла - http://docs.python.org/release/2.5.2/lib/bltin-file-objects.html

1

Этот код покажет, какие слова присутствуют в файле, при условии, что слово точно соответствует, и я s не предшествует или не следует пунктуацией или другими символами и имеет один и тот же случай. С некоторой незначительной корректировкой код можно было бы сделать более прощающим.

words = set(['hello', 'world', 'testing']) 
f  = open('testfile.txt', 'rb') 
data = set(f.read().split()) 
print words.intersection(data) 
Смежные вопросы