Программа на Python для поиска определенных строк в хеш-значениях (справка по кодированию) - PullRequest
1 голос
/ 13 мая 2010

Попытка написать код, который ищет значения хеш-функции для конкретной строки (вводимые пользователем) и возвращает хеш-код, если в этой строке присутствует поисковый запрос.

Делая это, вы немного больше изучаете python, но это может быть реальное приложение, используемое отделом кадров для поиска в базе данных резюме .csv конкретных слов в каждом резюме.

Я бы хотел, чтобы эта программа просматривала файл .csv, в каждой строке по три записи (id #; имя кандидата; текст резюме)

Я настроил его так, чтобы он создавал хэш, затем создал строку для записи хэша текста резюме, и я пытаюсь использовать функцию .find (), чтобы вернуть весь хэш для каждого экземпляра.

Что бы я хотел, чтобы слово «gpa» использовалось в качестве поискового запроса и находилось в s ['resumetext'] для трех претендентов (строки в файле .csv), оно печатает id, name, и резюме для каждой строки, которая имеет его. (Все три претендента)

Как и сейчас, моя программа печатает первую строку в файле .csv (печать резюме ['id'], резюме ['name'], резюме ['resumetext']) независимо от того, что является поисковым запросом, будь то в резюме или нет.

наконец, есть ли лучшие способы сделать это, ища документы по словам, файлы pdf и .txt в папке по определенным словам, используя python (я только начал читать о модуле re, и мне интересно, может ли это быть вместо того, чтобы помещать все в файл .csv.)

def find_details(id2find):
    resumes_f=open("resume_data.csv")
    for each_line in resumes_f:
        s={}
        (s['id'], s['name'], s['resumetext']) = each_line.split(";")
        resumetext = str(s['resumetext'])
        if resumetext.find(id2find):
            return(s)
        else:
            print "No data matches your search query. Please try again"

searchquery = raw_input("please enter your search term")
resume = find_details(searchquery)
if resume:
    print resume['id'], resume['name'], resume['resumetext']

Ответы [ 3 ]

1 голос
/ 13 мая 2010

Что сказал @ Джастин Пил. Также, чтобы быть более питоническим, я бы сказал, изменить

if resumetext.find(id2find) != -1: до if id2find in resumetext:

Еще несколько изменений: вы можете захотеть выполнить сравнение и ввод данных пользователем в нижнем регистре, чтобы они соответствовали GPA, gpa, Gpa и т. Д. Это можно сделать, выполнив searchquery = raw_input("please enter your search term").lower() и resumetext = s['resumetext'].lower(). Вы заметите, что я удалил явное приведение вокруг s ['resumetext'], так как оно не нужно.

1 голос
/ 13 мая 2010

Линия

resumetext = str(s['resumetext'])

является избыточным, потому что s['resumetext'] уже является строкой (поскольку он является одним из результатов вызова .split). Таким образом, вы можете объединить эту строку и следующую в

if id2find in s['resumetext']: ...

Ваше следующее else не выровнено - при таком расположении вы будете печатать сообщение снова и снова. Вы хотите поместить его после цикла forelse не требуется, хотя он будет работать), поэтому я бы предложил:

for each_line in resumes_f:
    s = dict(zip('id name resumetext'.split(), each_line.split(";"))
    if id2find in s['resumetext']:
        return(s)
print "No data matches your search query. Please try again"

Я также показал альтернативный способ создания dict s, хотя у вас тоже все в порядке.

0 голосов
/ 13 мая 2010

Одно изменение, которое я рекомендую для вашего кода, меняется

if resumetext.find(id2find):

до

if resumetext.find(id2find) != -1:

потому что find () возвращает -1, если id2find не было в резюме. В противном случае он возвращает индекс, в котором id2find впервые найден в тексте резюме, который может быть равен 0. Как прокомментировал @Personman, это даст вам ложное срабатывание, поскольку -1 интерпретируется как True в Python.

Я думаю, что эта проблема как-то связана с тем, что find_details () возвращает только первую запись, для которой искомая строка найдена в резюме. Было бы неплохо вместо этого превратить find_details () в генератор, а затем вы можете выполнить итерацию по нему и распечатать найденные записи одну за другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...