Panowie przeglądając popularne serwisy o pracę , zauważyłem, że na podstawie uploadowanego CV uzupełnia się profil użytkownika.
Czy ktoś z obecnych phpowców jest w stanie mi wytłumaczyć z jakiej biblioteki ów serwisy korzystają ?
Daj przykład takiego serwisu.
Jesteś pewien, że to z nadesłanego pliku, a nie z powiązanego konta Linkedin lub goldenline?
praca.pl , pracuj.pl możesz stworzyć swój profil z nadesłanego pliku CV.
Już trochę rozgryzłem, doc, docx, pdf po uploadzie jest konwertowany , szukane są słowa typu imię i nazwisko "Jan Jakiś" i to jest wyciągane jako $wyciaglem[0]
tylko ,żeby "rozebrać" całe CV na interesujące nas frazy to trochę je*ania musisz zrobić
To zwykły xml spakowany
W przypadku docx (i innych pochodnych formatów) plik to tak naprawdę archiwum zip, które można łatwo rozpakować. W środku znajdziesz wszystkie dołączone obrazki oraz właściwą treść w postaci pliku (lub kilku plików) xml. Wystarczy wiedzieć czego i gdzie szukać i masz gotowe automatyczne uzupełnianie formularza z pliku Worda. W przypadku plików pdf, które są zwykłym skanem jest nieco więcej zabawy. Zazwyczaj robiłem to tak: przy pomocy narzędzia convert (część ImageMagic) konwertowałem pdf do pliku graficznego, a następnie przy pomocy tesseract ocr wyciągałem tekst z obrazka. Na koniec zostało przepuścić tekst przez prosty algorytm nlp i miałem wyciągnięte wszystkie dane. Nie wiem, czy tak robią w podanych przez Ciebie firmach, podejrzewam, że mają podobny workflow.
@batman możesz podać przykład ?
dla docx coś takiego znalazłem:
function extractDocxText($url,$file_name){ $docx = get_url($url); file_put_contents("tempf.docx",$docx); $xml_filename = "word/document.xml"; //content file name $zip_handle = new ZipArchive; $output_text = ""; if(true === $zip_handle->open("tempf.docx")){ if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){ $xml_datas = $zip_handle->getFromIndex($xml_index); //file_put_contents($input_file.".xml",$xml_datas); $replace_newlines = http://www.php.net/preg_replace('/<w:p w[0-9-Za-z]+:[a-zA-Z0-9]+="[a-zA-z"0-9 :="]+">/',"\n\r",$xml_datas); $replace_tableRows = http://www.php.net/preg_replace('/<w:tr>/',"\n\r",$replace_newlines); $replace_tab = http://www.php.net/preg_replace('/<w:tab\/>/',"\t",$replace_tableRows); $replace_paragraphs = http://www.php.net/preg_replace('/<\/w:p>/',"\n\r",$replace_tab); $replace_other_Tags = http://www.php.net/strip_tags($replace_paragraphs); $output_text = $replace_other_Tags; }else{ $output_text .=""; } $zip_handle->close(); }else{ $output_text .=" "; } chmod("tempf.docx", 0777); http://www.php.net/unlink(http://www.php.net/realpath("tempf.docx")); //save to file or echo content file_put_contents($file_name,$output_text); http://www.php.net/echo $output_text; } http://www.php.net/print extractDocxText('link/cv.docx','test.docx');
Kiedyś opisałem na blogu jak wygląda parsowanie plików docx - https://archive.wilgucki.pl/2010/05/jak-odczytac-pliki-docx-w-php.html (niestety po kilku migracjach starego bloga, część zasobów zaginęła, inne wskazują na niepoprawną lokalizację, więc strona jest nieco rozjechana. Muszę to w końcu naprawić). Jest to nieco inne podejście niż w kodzie, który wkleiłeś, ale koniec końców i tak musisz przeparsować tekst, aby wyciągnąć dane. Jeśli format danych jest niezmienny, wystarczy napisać prosty parser bazujących na stałych elementach. Jeśli jednak chcesz parsować różne dokumenty, będziesz musiał pobawić się wyciąganie danych z tekstu. Z pomocą przyjdzie https://spacy.io/, bardzo prosta w użyciu biblioteka do nlp.
pdf2html
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)