nutch 는 어떻게 regex - urfilter. txt 파일 에 따라 url 링크 를 걸 러 냅 니까?
3690 단어 검색엔진 연구 nutchurl
관계: 확장 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 () 방법 이 있 으 면 결 과 를 되 돌려 줍 니 다.
그 중 "^" 는 문장의 시작 을 나타 내 고 "$" 는 문장의 끝 을 나타 낸다. "[]" 중의 내용 은 집합 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel에서 현재 URL을 얻는 방법이 기사에서는 laravel에서 현재 URL을 얻는 방법을 볼 것입니다. laravel 8에서 현재 페이지 URL을 얻으려면 current(), full(), request(), url() 유형과 같은 많은 메소드를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.