Как оптимизировать этот уродливый код? - PullRequest
0 голосов
/ 01 августа 2010

я задаю на днях вопрос здесь , но в конце концов я решил сделать это сам для вопросов времени, теперь у меня есть немного больше времени, чтобы это исправить: мне понравился jSoup, но явроде из старой школы, и предпочитаю делать это самостоятельно (спасибо @Bakkal в любом случае).

Мне удалось сделать этот код, пока он работает нормально, но если веб-страница не хорошо спроектирована, она сломаетсякод, например, если он не начинается с http, код не найдет его, и если URL-адрес не заканчивается ни одной из вещей, которые я вставил в это время, он вернет действительно ужасные адреса.например

http://www.google.com/ эй чувак, как ты?отлично, кушает у Джека

Мой результат будет:

http://www.google.com/ Эй, чувак, как ты?отлично, ем в домкрат

Я открыт для предложений, любые из них, я возобновлю свои вопросы и после этого я выложу код

  1. Код ломаетсяесли у меня нет точного окончания
  2. Если я поставлю пробел "" как разрыв, я потеряю все страницы, в которых есть пробел в адресе
  3. Я бы хотелзахватывать все адреса, а не только те, которые начинаются с http, например, www.google.com является действительным адресом, как и contacts.google.com

Спасибо за все: D

File txtUrlSpecialFile = new File("pepe.txt");
            FileWriter txtUrlSpecial;
            txtUrlSpecial = new FileWriter(txtUrlSpecialFile);
            txtUrlSpecial.write(profundidad-1);

            for(int j=0;j<bigString.length()-5;j++){ //I put 5 but I can put more
                if(bigString.substring(j, j+4).equals("http")){
                    while(bigString.charAt(j)!='"' && bigString.charAt(j)!='<'&& bigString.substring(j, j)!="'"){
                        txtUrlSpecial.write(bigString.charAt(j));
                        j++;
                    }
                    txtUrlSpecial.write(SingletonFunction.getNewLine());
                }
            }
            txtUrlSpecial.close();

Ответы [ 2 ]

2 голосов
/ 01 августа 2010

Если я правильно вас понимаю, вы пытаетесь эвристически извлечь URL-адреса из файлов HTML, как из атрибутов (например, "href"), так и из текста.

  • Вы хотите, чтобы он работал с искаженным HTML
  • Вы хотите, чтобы он работал с некорректными URL; например URL-адреса, содержащие пробелы
  • Вы не хотите, чтобы он делал ошибки; например твой пример.

Я говорю вам, что ваши требования невозможны. Например, что следует извлечь из следующего текста:

Go to the URL http://example.com/ this and that.  And if that doesn't work, 
I recommend that you go read the http specification.

Предполагается, что "это и то" является частью URL или нет? И как ваше программное обеспечение должно это выяснить? А что, если автор документа имел в виду противоположное тому, что говорит ваша эвристика? А что насчет "спецификации http" ... которая явно НЕ является URL.

А вот еще один, чуть более тонкий пример:

First, go to the URL http://example.com/index.html.
Then click on the "login" link.

Если ваше программное обеспечение извлекает "http://example.com/index.html." или" http://example.com/index.html"? В соответствии со спецификацией URL, оба являются действительными URL. Ваше программное обеспечение, вероятно, скинет финальный "." потому что это, скорее всего, пунктуация, но может быть неправильным.

Мой совет:

  1. Не думайте, что вы можете сделать лучше, чем существующий разрешительный анализатор HTML. Откуда вы приехали, шансы, что вы можете, близки к нулю.
  2. Не думайте, что ваше программное обеспечение не будет ошибаться. Точность 100% требует, чтобы ваше программное обеспечение могло читать мысли человека, создавшего файл. (И, возможно, даже этого недостаточно.)
  3. Обратите внимание на контекст, в котором появляются URL. Вам нужно использовать разные эвристики для извлечения URL-адресов из атрибутов и текста HTML.
  4. Обратите внимание, что именно, а что не является допустимым URL.
  5. Полностью прочитайте и поймите все соответствующие части спецификаций HTML и URL / URI. Хотя делать ошибки с искаженными документами - это нормально, было бы непростительно не извлечь правильно сформированные URL-адреса из атрибутов правильно сформированных документов HTML.
0 голосов
/ 04 августа 2010

У Джона Грубера есть отличное регулярное выражение для поиска URL-адресов в виде простого текста: см. Улучшенный шаблон точного регулярного выражения для сопоставления URL-адресов

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

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