Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Pobieranie stringu z DOCX / DOC / PDF

Napisany przez: casperii 16.10.2018, 15:17:54

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ą ?

Napisany przez: werdan 16.10.2018, 20:12:39

Daj przykład takiego serwisu.

Jesteś pewien, że to z nadesłanego pliku, a nie z powiązanego konta Linkedin lub goldenline?

Napisany przez: casperii 16.10.2018, 21:01:05

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ć

Napisany przez: viking 17.10.2018, 04:13:28

To zwykły xml spakowany

Napisany przez: batman 17.10.2018, 10:48:26

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.

Napisany przez: casperii 17.10.2018, 19:10:39

@batman możesz podać przykład ?

dla docx coś takiego znalazłem:

  1. function extractDocxText($url,$file_name){
  2. $docx = get_url($url);
  3. file_put_contents("tempf.docx",$docx);
  4. $xml_filename = "word/document.xml"; //content file name
  5. $zip_handle = new ZipArchive;
  6. $output_text = "";
  7. if(true === $zip_handle->open("tempf.docx")){
  8. if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
  9. $xml_datas = $zip_handle->getFromIndex($xml_index);
  10. //file_put_contents($input_file.".xml",$xml_datas);
  11. $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);
  12. $replace_tableRows = http://www.php.net/preg_replace('/<w:tr>/',"\n\r",$replace_newlines);
  13. $replace_tab = http://www.php.net/preg_replace('/<w:tab\/>/',"\t",$replace_tableRows);
  14. $replace_paragraphs = http://www.php.net/preg_replace('/<\/w:p>/',"\n\r",$replace_tab);
  15. $replace_other_Tags = http://www.php.net/strip_tags($replace_paragraphs);
  16. $output_text = $replace_other_Tags;
  17. }else{
  18. $output_text .="";
  19. }
  20. $zip_handle->close();
  21. }else{
  22. $output_text .=" ";
  23. }
  24. chmod("tempf.docx", 0777); http://www.php.net/unlink(http://www.php.net/realpath("tempf.docx"));
  25. //save to file or echo content
  26. file_put_contents($file_name,$output_text);
  27. http://www.php.net/echo $output_text;
  28. }
  29.  
  30. http://www.php.net/print extractDocxText('link/cv.docx','test.docx');


lecz to pokazuje mi tak jak by całe CV jako 1 string ?
Czyli , że miałbym wyciągać interesujące mnie frazy i rozbijać ten string ? Bo nic innego nie przychodzi mi do głowy jak by to miało wyglądać

Napisany przez: batman 17.10.2018, 22:34:37

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.

Napisany przez: markuz 18.10.2018, 10:57:44

pdf2html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)