nutch 는 어떻게 regex - urfilter. txt 파일 에 따라 url 링크 를 걸 러 냅 니까?

오늘 은 nutch 의 url 링크 필터 플러그 인 로드 와 작업 원리, 그리고 그 와 프로필 regex - url filter. txt 간 의 관 계 를 살 펴 보 았 습 니 다. 다음은 얻 은 수확 에 대해 소개 합 니 다.
관계: 확장 RegexURLFilter 는 설정 파일 regex - url filter. txt 에 따라 열 을 만 드 는 규칙 Rule (일부 열 정규 표현 식 Pattern 류), 확장 필터 방법 filter () 가 호출 될 때 생 성 된 규칙 에 따라 url 을 걸 러 냅 니 다.
구체 적 인 확장 로드 와 생 성 규칙 의 과정:
(1) 우선 URLFilters 클래스 에서 창고 류 Plugin Repository 에서 url 을 분석 하 는 확장 점 (확장 점 에 구체 적 인 확장 정보 가 저장 되 어 있 음) 을 얻 은 다음 에 이 확장 을 예화 합 니 다. 코드 는 다음 과 같 습 니 다.
          URLFilter filter = (URLFilter) extension.getExtensionInstance();//실례 화
         이 확장 점 URLFilter 에 대해 서 는 시스템 에서 하나의 확장 RegexURLFilter 만 url 을 처리 합 니 다.
(2) getExtensionInstance () 의 예화 확장 시 매개 변수 가 없 는 기본 구조 함 수 를 호출 합 니 다. 그의 기본 구조 함수 에 서 는 아무것도 하지 않 았 습 니 다. 호출 방법 은 설정 파일 regex - url filter. txt 파일 을 불 러 오 는 작업 을 처리 합 니 다. 실제 setConf () 에서 이 루어 졌 습 니 다. getExtensionInstance () 코드 는 다음 과 같 습 니 다.
  public Object getExtensionInstance() throws PluginRuntimeException {
    // Must synchronize here to make sure creation and initialization
    // of a plugin instance and it extension instance are done by
    // one and only one thread.
    // The same is in PluginRepository.getPluginInstance().
    // Suggested by Stefan Groschupf 
    synchronized (getId()) {
      try {
        PluginClassLoader loader = fDescriptor.getClassLoader();
        Class extensionClazz = loader.loadClass(getClazz());
        // lazy loading of Plugin in case there is no instance of the plugin
        // already.
        this.pluginRepository.getPluginInstance(getDescriptor());
        Object object = extensionClazz.newInstance();
        if (object instanceof Configurable) {
          ((Configurable) object).setConf(this.conf);//           ,              
        }
        return object;
      } catch (ClassNotFoundException e) {
        throw new PluginRuntimeException(e);
      } catch (InstantiationException e) {
        throw new PluginRuntimeException(e);
      } catch (IllegalAccessException e) {
        throw new PluginRuntimeException(e);
      }
    }
  }

(3) RegexURLFilter 의 부모 클래스 RegexURLFilterBase 는 setConf () 함 수 를 포함 하고 코드 는 다음 과 같 습 니 다.
  public void setConf(Configuration conf) {
    this.conf = conf;
    Reader reader = null;
    try {
      reader = getRulesReader(conf);//                ,            ,         
    } catch (Exception e) {
      if (LOG.isErrorEnabled()) { LOG.error(e.getMessage()); }
      throw new RuntimeException(e.getMessage(), e);      
    }
    try {
      rules = readRules(reader);//                
    } catch (IOException e) {
      if (LOG.isErrorEnabled()) { LOG.error(e.getMessage()); }
      throw new RuntimeException(e.getMessage(), e);
    }
  }

(4) 그리고 filter () 방법 을 호출 하여 정규 표현 식 을 걸 러 냅 니 다. 코드 는 다음 과 같 습 니 다.
  public synchronized String filter(String url) {
    for (int i=0; i

   url 에 맞 는 정규 표현 식 이 포함 되 어 있 으 면 이 url 이 선택 되 거나 삭 제 됩 니 다.
(5) regex - urfilter. txt 의 정규 표현 식 해석:
-^(file|ftp|mailto):
-\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|CSS|sit|SIT|eps|EPS|wmf|bmp|BMP|js|JS)$
-[?*!@=]
-.*(/[^/]+)/[^/]+\1/[^/]+\1/
+sdu.edu.cn
 
설정 파일 에는 모두 다섯 개의 정규 표현 식 이 있 습 니 다. "-" 는 뒤의 정규 표현 식 을 담당 하면 걸 러 냅 니 다. "+" 는 조건 에 맞 으 면 보류 합 니 다. 네 개의 정규 표현 식 은 조건 을 만족 시 키 는 filter () 방법 이 있 으 면 결 과 를 되 돌려 줍 니 다.
그 중 "^" 는 문장의 시작 을 나타 내 고 "$" 는 문장의 끝 을 나타 낸다. "[]" 중의 내용 은 집합 이다.
 
 
 
 
 

좋은 웹페이지 즐겨찾기