Exemplo n.º 1
0
def split_to_sentents_ld(text, result_list):
    """ 
    
    Danger:
        Почему-то между буквами добавляются пробелы
    
    """
    bi = BreakIterator.getSentenceInstance();
    bi.setText(text)
    index = 0
    writer = ProfilingWriter()  # для определения языка
    while bi.next() != BreakIterator.DONE:
        sentence = text[index:bi.current()]
        writer.append(sentence)
        result_list.append(sentence)
        index = bi.current()
        
    # Статистику накопили и теперь определяем язык
    identifier = writer.getLanguage();
    lang = identifier.getLanguage()
    return lang
Exemplo n.º 2
0
 def parse_with_lang_detection(self, filename):
     """url = URL  # Отрывок не работает
     file = File(filename);
     if file.isFile():
       url = file.toURI().toURL();
     else:
       url = URL(filename);
       
     input = TikaInputStream.get(url, self._metadata);
     handler = BodyContentHandler(self._outputstream);
     
     profiler = ProfilingHandler(self._outputstream);
     #tee = TeeContentHandler(handler, profiler);
     #tee = TeeContentHandler(handler);
     
     self._parser.parse(input, profiler, self._metadata, self._context);
     identifier = profiler.getLanguage();
     if identifier.isReasonablyCertain():
        # metadata.set(Metadata.LANGUAGE, 
         print identifier.getLanguage()#);
         """
         
     pass
     
     # Детектирует неправильно
     profile = LanguageProfile(
         "несложно догадаться, реально угнетающих  ");
     identifier = LanguageIdentifier(profile);
     System.out.println(identifier.getLanguage());
     
     writer = ProfilingWriter();
     writer.append("несложно догадаться, реально угнетающих ситуаций встречается ");
     writer.append("несложно встречается ");
     writer.append("несложно догадаться,  ");
     writer.append("несложно догадаться, реально угнетающих ситуаций встречается ");
     identifier = writer.getLanguage();
     System.out.println(identifier.getLanguage());
Exemplo n.º 3
0
    def process(self, input_fname, path_to_node):
        def get_fname_for_save(fname):
            fname = fname.replace('\\','/')
            only_fname = fname.split('/')[-1]
            output_fname = path_to_node+'/'+only_fname+'.ptxt'
            return output_fname
        
        def get_fname_for_save_meta(fname):
            fname = fname.replace('\\','/')
            only_fname = fname.split('/')[-1]
            output_fname = path_to_node+'/'+only_fname+'.meta'
            return output_fname
        
        
        def file_is_enabled(fname):
            extention = fname.split('.')[-1]
            if extention in self._enabled_extentons:
                return True
            return False
        
        def purge_line(one_line):
            if not is_content_letter(one_line):
                return None
            result = one_line.replace('\t','')
            return result
        """ 
        Присутствует фильта входных файлов, что упрощает обработку папок с разнородными
        файлами.
        
        TODO(zaqwes): Используется детектор языков от Tika, хотя детектирует правильно, 
            но выдает, что недостаточно. Возможно можно заменить на другую библитеку
        
        Postcond.:
            Текстовой файл с полностью снятым форматированием. Язык не определен.
            
        Trouble:
            - Если программа содержит код
        """

        print 'Processing file : ', input_fname
        if not file_is_enabled(input_fname):
            return None, (1, 'File must *.doc, *.docx, *.pdf, *.odt. File skipped.')
        
        
        input_var = None
        
        output_fname = get_fname_for_save(input_fname)  # Файл временный, он же выходной
        print output_fname
        out_file = File(output_fname)  # Врядли выкенет исключение
        ofile_stream = FileOutputStream(out_file)
        lang = None
        try:
            # TODO(zaqwes): не очень понятно, что здесь происходит
            url = URL
            file_obj = File(input_fname);
            if file_obj.isFile():
                url = file_obj.toURI().toURL();
            else:
                url = URL(input_fname);
            # TODO(zaqwes): не очень понятно, что здесь происходит
              
            # Начинаем обработку
            metadata = {'url':input_fname}
            
            result_utf8 = []#['metadata','']  # формат строгий!!
              
            # На данный момент сохраняем в промежуточный файл на диске, но можно и ускорить
            # например, через отображение на память
            input_var = TikaInputStream.get(url, self._metadata);
            handler = BodyContentHandler(ofile_stream)
            self._parser.parse(input_var, handler, self._metadata, self._context);
            
            if ofile_stream:
                ofile_stream.close()
                
            return 'TEST', (1, 'TEST')
            # Преобразуем в unicode
            java_in = BufferedReader(FileReader(output_fname))
            writer = ProfilingWriter();
            while True:
                s = String()
                s = java_in.readLine()
                print s
                if s == None:
                    break
                
                # Строку нужно подчистить
                one_line = unicode(str(s), 'utf-8')
                one_line = purge_line(one_line)
                if one_line:
                    result_utf8.append(one_line)
                    writer.append(one_line);
                
            identifier = writer.getLanguage();
            lang = identifier.getLanguage()
            metadata['lang'] = lang
            #print identifier.isReasonablyCertain()  # Всегда False
            #System.out.println(identifier.getLanguage());
            
            meta_fname = get_fname_for_save_meta(input_fname)
            # Сохраняем результат 
            dal.write_result_file(result_utf8, output_fname)
            dal.write_result_file([json.dumps(metadata, sort_keys=True, indent=2)], meta_fname)
        
        except IOException as e:
            err_code = 1
            err_msg = 'Error: io.'
            e.printStackTrace()
            return output_fname, err_code, err_msg
        except TikaException as e:
            # Отключит обработку? Нет не отключит, т.к. исключение поймано
            e.printStackTrace()
        except SAXException as e:
            e.printStackTrace()
        finally:
            if input_var:
                try:
                    input_var.close()
                except IOException as e:
                    e.printStackTrace();
                    
        # Подводим итоги
        return ((output_fname, lang), (0, ''))