홈 페이지 전화 / 핸드폰 번호 인식

웹 페이지 의 전화 번 호 를 식별 하 는 방법 중 하 나 는 전화번호 의 정규 표현 식 을 미리 설계 하여 웹 페이지 텍스트 내용 의 전화 번 호 를 일치 시 키 고 해당 하 는 연락 처 를 추출 하 는 것 이다.그러나 이런 방법 은 전화 번 호 를 비교적 이상 적 인 형식 으로 홈 페이지 에 보 여 주 는 것 이 라 고 가정 하면 자 연 스 럽 게 이러한 식별 정밀도 가 높 지만 동시에 많은 전화 번 호 를 빠 뜨 렸 다.만약 당신 이 웹 페이지 데 이 터 를 깊이 분석 하지 않 았 다 면, 당신 은 인터넷 에서 웹 페이지 의 형식 이 도대체 얼마나 규범 에 맞지 않 는 지 상상 할 수 없 을 것 입 니 다.
여기 서 우 리 는 웹 페이지 의 전화 번 호 를 식별 하 는 방법 을 실현 한다. 정확 한 정규 표현 식 을 디자인 하여 전화 번 호 를 일치 시 키 지 않 고 전화번호 의 가장 추상 적 인 특징 을 통 해 고려 하고 디자인 할 필요 가 없다.
전화 번 호 는 반드시 숫자 를 포함 하 는 서열 이 고 숫자 간 에 특수 하거나 흔히 볼 수 있 는 문 자 를 통 해 구분 할 수 있다. 예 를 들 어 '쉼표', '짧 은 선', '빈 칸', '자모' 등 이다.우 리 는 한 페이지 의 텍스트 내용 을 분석 함으로써 디지털 문자열 의 정 의 를 완화 할 것 입 니 다.
만약 두 숫자 문자 사이 가 연속 된다 면 두 숫자 문 자 는 같은 서열 에 속한다 고 생각한다.만약 에 두 숫자 문자 사이 에 주어진 한도 값 보다 작은 개수 의 비 숫자 문자 가 존재 한다 면 이 두 숫자 문자 도 같은 서열 에 속한다 고 생각 합 니 다.이러한 관점 의 실질 은 비교적 가 까 운 디지털 문자열 을 하나의 독립 된 서열 로 합 쳐 한 페이지 의 텍스트 내용 을 분석 하면 하나의 디지털 문자 서열 의 집합 을 얻 을 수 있다 는 것 이다.
그러나 이렇게 하면 비교적 짧 은 숫자, 예 를 들 어 날짜, 연령, 번호 등 을 모두 분석 할 수 있다.자 연 스 럽 게 필터 링 알고리즘 을 통 해 걸 러 내 는 것 이 생각 났 다.우 리 는 추천 모델 을 통 해 모든 디지털 문자 시퀀스 의 싱크로 율 을 계산 한 다음 싱크로 율 에 따라 정렬 한 다음 에 정렬 된 앞 에 있 는 디지털 문자열 시퀀스 에서 전화 번 호 를 선별 합 니 다.
다음은 우리 가 자바 로 이 생각 을 실현 하고 결 과 를 살 펴 보 자.
하나의 시퀀스 추천 인터페이스 Sequence Recommendation 을 정의 합 니 다. 추천 방법 은 구체 적 으로 논 리 를 실현 하고 자신의 수요 에 따라 디자인 할 수 있 습 니 다.
package org.shirdrn.webmining.recommend;

public interface SequenceRecommendation {
	public void recommend() throws Exception;
}

다음은 디지털 문자열 서열 을 추출 하 는 알고리즘 을 실현 하고 관련 도 를 계산 하여 정렬 추천 을 합 니 다.기본 적 인 사고방식 은 다음 과 같다.
1. 네 이 티 브 웹 페이지 세척: HTML 태그 등 을 모두 제거 하고 최종 텍스트 내용 을 얻 을 수 있 습 니 다.
2. 텍스트 내용 에 대해 단 어 를 나 눕 니 다. Lucene 이 자체 적 으로 가지 고 있 는 Simple Analyzer 분석 기 (사용 정지 단어 필터 사용 하지 않 음) 를 사용 합 니 다. 이 를 선택 한 이 유 는 디지털 문자 시퀀스 부근 (앞 과 뒤) 에 특정한 분야 의 의 미 를 가 진 단어 가 존재 하기 때 문 입 니 다.(예 를 들 어 전화번호 숫자 앞 과 뒤 에는 phone, telephone 등 단어 가 존재 할 수 있 습 니 다. Email 주소 근처에 email, email us 등 단어 가 존재 할 수 있 습 니 다. 등등) 이 정지 단어 일 수도 있 습 니 다. (Standard Analyzer 등에 서) 우 리 는 이 단 어 를 걸 러 내 고 싶 지 않 습 니 다. 또한 우 리 는 모든 단어의 위치 정 보 를 기록 하 였 습 니 다.
3. 디지털 문자 배열 을 모 으 고 앞 방향 과 뒤 방향 으로 지정 한 수량 을 기록 하 는 단어 (핵심): 이것 은 가장 핵심 적 인 것 이 어야 합 니 다. 텍스트 내용 을 세밀 하 게 처리 하고 데이터 구 조 를 디자인 하여 우리 가 관련 도 를 편리 하 게 계산 할 수 있 는 결과 집합 을 얻어 야 합 니 다.
4. 한 견본 집의 계산 결과 에 따라 영역 모델 (특징 어 벡터) 을 구축 하여 디지털 문자 서열 의 상관 도 를 계산 하 는 데 사용 합 니 다. 저 는 여기 서 일부 영문 홈 페이지 를 수집 하고 영문 홈 페이지 의 분석 처 리 를 통 해 일부 특징 어 를 추출 하여 간단 한 견 해 를 위해 단어의 주파 수 를 가중치 로 직접 사용 합 니 다.(주의: 이렇게 사용 하 는 단어의 주파 수 는 간단 하고 합 리 적 이 며 다른 방법 으로 가중치 의 계산 을 하거나 다른 속성 가중치 의 공헌 을 보충 할 수 있 습 니 다). 우 리 는 두 가지 특징 어 벡터 를 사 용 했 습 니 다. 각각 다음 과 같 습 니 다.
전방 향 특징 어 벡터 (파일 forwards feature vector):
email                                     9124
e                                         3368
mail                                      4767
e-mail                                    2183
email us at                               178
fax                                       147
email address                             146
email us                                  121
fx                                        115
or                                        113
email us                                  102
email or                                  95
email us at                               76
or e-mail                                 67

후방 특징 어 벡터 (파일 backwards feature vector):
phone                          27407
call						   13697
free						   13092
toll						   10092
toll free                      9012
tel                            8710
call                           5247
telephone                      4052
call us                        3108
ph                             3067
t                              2838
p                              2830
contact us                     2150
or call                        1889
local                          1477
f                              1437
or                             1362
abn                            1257
call us at                     1194
office                         1183
call us today                  1152
customer service               1101
call toll free                 1080

우리 의 특징 어 벡터 는 파일 형식 으로 가 져 와 뒤의 테스트 용례 에서 사용 합 니 다.
5. 관련 도 를 정렬 하고 추천 합 니 다. 여기 서 정렬 하면 한눈 에 알 수 있 고 앞 에 있 는 것 은 전화번호 일 가능성 이 가장 큽 니 다.
다음은 전체 사상의 디자인 과 실현 이다. NumberSequence Recommendation 류 의 코드 는 다음 과 같다.
package org.shirdrn.webmining.recommend;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.en.EnglishAnalyzer;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.util.Version;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
import org.jsoup.parser.Parser;

public class NumberSequenceRecommendation implements SequenceRecommendation {

	private byte[] content;
	private Charset charset;
	private String baseUri;
	
	/** Max count of non-number number sequence in a continual number sequence, 
	 * on conditions of which we think the number sequence is continual.*/
	private int maxGap = 5;
	/** Max word count after or before a number sequence */
	private int maxWordCount = 5;
	private Pattern numberPattern = Pattern.compile("^\\d+$");
	private String cleanedContent;
	
	/** All words analyzed by Lucene analyzer from specified page text. */
	private LinkedList<Word> wordList = new LinkedList<Word>();
	private LinkedList<NumberSequence> numberSequenceList = new LinkedList<NumberSequence>();
	/** Final result sorted by correlation */
	List<NumberSequence> sortedNumberSequenceSet = new ArrayList<NumberSequence>(1);
	private Map<String, Double> backwardsFeatureVector = new HashMap<String, Double>();
	private Map<String, Double> forwardsFeatureVector = new HashMap<String, Double>();
	
	private double backwardsWeight = 1.75;
	private double forwardsWeight = 1.05;
	
	public NumberSequenceRecommendation() {
		this(new byte[]{}, Charset.defaultCharset(), null, null, null);
	}
	
	public NumberSequenceRecommendation(byte[] content, Charset charset, String baseUri, 
			String backwordsFeatureVectorFile, String forwardsFeatureVectorFile) {
		super();
		this.baseUri = baseUri;
		this.content = content;
		this.charset = charset;
		loadFeatureVectors(backwordsFeatureVectorFile, forwardsFeatureVectorFile);
	}
	
	private void loadFeatureVectors(String backwordsFeatureVectorFile, String forwardsFeatureVectorFile) {
		load(backwordsFeatureVectorFile, backwardsFeatureVector);
		load(forwardsFeatureVectorFile, forwardsFeatureVector);
	}

	private void load(String featureVectorFile, Map<String, Double> featureVector) {
		FileInputStream fis = null;
		BufferedReader reader = null;
		try {
			fis = new FileInputStream(featureVectorFile);
			reader = new BufferedReader(new InputStreamReader(fis, charset));
			String line = null;
			while((line = reader.readLine())!=null) {
				if(!line.isEmpty()) {
					String pair[] = line.trim().split("\\s+");
					try {
						featureVector.put(pair[0].trim(), Double.parseDouble(pair[1].trim()));
					} catch (Exception e) { }
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(reader!=null) {
					reader.close();
				}
				if(fis!=null) {
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}		
	}

	@Override
	public void recommend() throws Exception {
		recommend(content, charset, baseUri);
	}

	private List<NumberSequence> recommend(byte[] content, Charset charset, String baseUri) {
		String html = new String(content, charset);
		Document doc = Parser.parse(html, baseUri);
		StringBuffer buf = new StringBuffer();
		parseHtmlText(doc.body(), buf);
		cleanedContent = buf.toString().trim();
		collectWords(cleanedContent);
		analyzeNumberWords();
		return sortByCorrelation();
	}
	
	/**
	 * Compute correlation, and sort result, for recommending.
	 * @return
	 */
	private List<NumberSequence> sortByCorrelation() {
		// sort numberSequenceList
		for(NumberSequence ns : numberSequenceList) {
			// backwards
			double backwardsCorrelation = 0;
			for(Word w : ns.backwardsWords) {
				if(backwardsFeatureVector.containsKey(w.text)) {
					backwardsCorrelation += backwardsFeatureVector.get(w.text);
				}
			}
			// forwards
			double forwardsCorrelation = 0;
			for(Word w : ns.forwardsWords) {
				if(forwardsFeatureVector.containsKey(w.text)) {
					forwardsCorrelation += forwardsFeatureVector.get(w.text);
				}
			}
			ns.correlation = backwardsWeight * backwardsCorrelation + forwardsWeight * forwardsCorrelation;
			sortedNumberSequenceSet.add(ns);
		}
		
		// sort by correlation
		Collections.sort(sortedNumberSequenceSet, new Comparator<NumberSequence>() {

			@Override
			public int compare(NumberSequence o1, NumberSequence o2) {
				if(o1.correlation<o2.correlation) {
					return 1;
				} else if(o1.correlation>o2.correlation) {
					return -1;
				}
				return 0;
			}
			
		});
		return sortedNumberSequenceSet;
	}

	/**
	 * Extract text data from a HTML page.
	 * @param node
	 * @param buf
	 */
	private void parseHtmlText(Node node, StringBuffer buf) {
		List<Node> children = node.childNodes();
		if(children.isEmpty() && node instanceof TextNode) {
			String text = node.toString().trim();
			for(String ch : ESCAPE_SEQUENCE) {
				text = text.replaceAll(ch, "");
			}
			if(!text.isEmpty()) {
				buf.append(text.toLowerCase().trim()).append("
"); } } else { for(Node child : children) { parseHtmlText(child, buf); } } } /** * Analyze text, extract terms by Lucene analyzer. * @param content */ private void collectWords(String content) { StringReader reader = new StringReader(content); Analyzer a = new EnglishAnalyzer(Version.LUCENE_36); TokenStream ts = a.tokenStream("", reader); TermAttribute ta = ts.addAttribute(TermAttribute.class); OffsetAttribute oa = ts.addAttribute(OffsetAttribute.class); Pos pos = new Pos(); try { while(ts.incrementToken()) { Pos nextPos = new Pos(oa.startOffset(), oa.endOffset()); nextPos.gap = nextPos.startOffset - pos.endOffset; Word word = new Word(ta.term(), nextPos); wordList.addLast(word); pos = nextPos; // is number? Matcher m = numberPattern.matcher(word.text); if(m.find()) { word.isNumber = true; } } } catch (IOException e) { e.printStackTrace(); } } /** * Compute number words relations. */ private void analyzeNumberWords() { for(int i=0; i<wordList.size(); i++) { Word w = wordList.get(i); if(w.isNumber) { NumberSequence ns = new NumberSequence(); ns.numberWords.add(w); // compute backwards words for(int j=Math.max(0, i-1); j>=Math.max(i-maxWordCount, 0); j--) { if(!wordList.get(j).isNumber) { ns.backwardsWords.add(wordList.get(j)); } } // recognize nearest number string sequence int gap = 0; if(i<wordList.size()) { for(int k=i+1; ; k++) { if(gap==0) { gap = wordList.get(k).pos.gap; } if(gap<=maxGap) { if(wordList.get(k).isNumber) { ns.numberWords.add(wordList.get(k)); gap = 0; } else { i = k-1; break; } ns.pos.gap += wordList.get(k).pos.gap; } else { i = k-1; break; } } // compute forwards words for(int p=Math.min(i, wordList.size()-1); p<=Math.min(wordList.size(), i+maxWordCount); p++) { if(!wordList.get(p).isNumber) { ns.forwardsWords.add(wordList.get(p)); } } numberSequenceList.add(ns); } } } } private static String[] ESCAPE_SEQUENCE = new String[] { """, "&", "—", "–", "‰", " ", " ", " ", " ", "‌", "‍", "‚", "˜", "ˆ", "‎", "‏", "×", "÷", "“", "”", "„", "<", ">", "‹", "›", "‘", "’", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "ˆ", "Ã", "Ä", "˚", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "&ieth;", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "ÿ" }; /** * Number sequence who holds: * <pre> * a number {@link Word} list which we analyzed from text of a page * a correlation index * a forwards {@link Word} list * a backwards {@link Word} list * a {@link Pos} which specifies this number sequence's position information * </pre> * @author shirdrn */ public static class NumberSequence { /** This sequence's position metadata */ Pos pos = new Pos(); /** Number word collection */ List<Word> numberWords = new LinkedList<Word>(); /** */ List<Word> forwardsWords = new LinkedList<Word>(); List<Word> backwardsWords = new LinkedList<Word>(); double correlation; @Override public String toString() { return "[" + "correlation=" + correlation + ", " + "numberWords=" +numberWords + ", " + "forwardsWords=" + forwardsWords + ", " + "backwardsWords=" + backwardsWords + ", " + "]"; } } /** * Word unit analyzed by Lucene's {@link Analyzer}. Here * a {@link Word} is minimum and is not split again. * @author shirdrn */ static class Word { /** Word text */ String text; /** Is this word a number? */ boolean isNumber; /** Word's position metadata */ Pos pos; public Word(String text, Pos pos) { super(); this.text = text; this.pos = pos; } @Override public String toString() { return "[" +text + pos + "]"; } } /** * Position information * @author shirdrn */ static class Pos { /** Start offset of a word */ int startOffset; /** End offset of a word */ int endOffset; /** Max distance between tow word */ int gap; public Pos() { super(); } public Pos(int startOffset, int endOffset) { super(); this.startOffset = startOffset; this.endOffset = endOffset; } @Override public String toString() { return "<" + startOffset + ", " + endOffset + ", " + gap + ">"; } } public List<NumberSequence> getSortedNumberSequenceSet() { return sortedNumberSequenceSet; } public String getCleanedContent() { return cleanedContent; } }

결과 출력 은 네 이 티 브 웹 페이지 를 청소 한 웹 페이지 의 텍스트 내용 을 포함 합 니 다. 다음 과 같 습 니 다.
4. 567913. 마지막 으로 계산 결 과 는 정렬 결과 만 제 시 했 을 뿐 정렬 추천 효 과 를 직접 관찰 할 수 있다. 다음 과 같다.
click here to go to our u.s. or arabic versions
close
cnn
edition: international
u.s.
mxico
arabic
tv
:
cnn
cnni
cnn en espaol
hln
sign up
log in
home
video
world
u.s.
africa
asia
europe
latin america
middle east
business
world sport
entertainment
tech
travel
ireport
about cnn.com/international
cnn.com/international:
the international edition of
cnn.com
is constantly updated to bring you the top news stories from around the world. it is produced by dedicated staff in london and hong kong, working with colleagues at cnn's world headquarters in atlanta, georgia, and with bureaus worldwide. cnn.com relies heavily on cnn's global team of over 4,000 news professionals.
cnn.com/international
features the latest multimedia technologies, from live video streaming to audio packages to searchable archives of news features and background information. the site is updated continuously throughout the day.
contact us:
help us make your comments count. use our
viewer comment page
to tell us what you think about our shows, our anchors, and our hot topics for the day.
help page:
visit our
extensive faqs
for answers to all of your questions, from cnn tv programming to rss to the cnn member center.
cnn:
back to top
what's on:
click here for the full rundown of all
cnn daily programming
.
who's on:
click here for full bios on all of
cnn's anchors, correspondents and executives
.
press office:
click here for information from
cnn international press offices
.
cnn's parent company:
time warner inc.
services:
back to top
your e-mail alerts:
your e-mail alerts, is a free, personalized news alerting service created for you.
with cnn's service you can:
•sign up for your e-mail alerts and follow the news that matters to you.
•select key words and topics across the wide range of news and information on the site.
•create your own alerts.
•customize your delivery options to fit your schedule and be alerted as a story is published on cnn.com. receive your alerts daily or weekly.
•easily manage your alerts. edit, delete, suspend or re-activate them at any time.
register
to be a member and begin customizing your e-mail alerts today!
cnn.com preferences:
personalize your cnn.com page experience
today and receive breaking news in your e-mail inbox and on your cell phone, get your hometown weather on the home page and set your news edition to your world region.
cnn mobile:
cnn.com/international content is now available through your mobile phone. with
cnn mobile
, you can read up-to-the-minute news stories with color photos, watch live, streaming video or the latest video on demand clips and receive cnn breaking news text alerts. no matter where your on-the-go lifestyle takes you, cnn brings the news directly to you.
e-mail newsletters:
be the first to know with a variety of e-mail news services. receiving breaking news alerts, delivered straight to your e-mail address. follow the latest news on politics, technology, health or the topics that interest you most. or stay informed on what's coming up on your favorite cnn tv programs.
cnn offers e-mail updates as numerous and diverse as your tastes.
register now
and select from the various e-mails.
advertise on cnn.com:
advertise with us!
get information about advertising on the cnn web sites.
business development:
companies interested in partnering with cnn should contact cnn business development by sending an e-mail to
[email protected]
.
job search:
visit our web sites for information about internships or job opportunities with cnn international in
europe, middle east, africa
and
other regions
legal terms and conditions:
back to top
cnn interactive service agreement:
view the terms of the
cnn interactive services agreement
.
cnn comment policy:
cnn encourages you to add comment to our discussions. you may not post any unlawful, threatening, libelous, defamatory, obscene, pornographic or other material that would violate the law. please note that cnn makes reasonable efforts to review all comments prior to posting and cnn may edit comments for clarity or to keep out questionable or off-topic material. all comments should be relevant to the post and remain respectful of other authors and commenters. by submitting your comment, you hereby give cnn the right, but not the obligation, to post, air, edit, exhibit, telecast, cablecast, webcast, re-use, publish, reproduce, use, license, print, distribute or otherwise use your comment(s) and accompanying personal identifying information via all forms of media now known or hereafter devised, worldwide, in perpetuity.
cnn privacy statement
.
privacy statement:
to better protect your privacy, we provide this notice explaining our
online information practices
and the choices you can make about the way your information is collected and used
cnn's reprint and copyright information:
copyrights and copyright agent. cnn respects the rights of all copyright holders and in this regard, cnn has adopted and implemented a policy that provides for the termination in appropriate circumstances of subscribers and account holders who infringe the rights of copyright holders. if you believe that your work has been copied in a way that constitutes copyright infringement, please provide cnn's copyright agent the following information required by the online copyright infringement liability limitation act of the digital millennium copyright act, 17 u.s.c.  512:
•a physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.
•identification of the copyright work claimed to have been infringed, or, if multiple copyrighted works at a single online site are covered by a single notification, a representative list of such works at that site.
•identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit us to locate the material.
•information reasonably sufficient to permit us to contact the complaining party.
•a statement that the complaining party has a good-faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law.
•a statement that the information in the notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.
cnn's copyright agent for notice of claims of copyright infringement on or regarding this site can be reached by sending an email to
[email protected]
or writing to-
copyright agent
one cnn center
atlanta, ga 30303
phone: (404) 878-2276
fax: (404) 827-1995
email:
[email protected]
for any questions or requests other than copyright issues, please view our
extensive faqs
.
weather forecast
home
|
video
|
world
|
u.s.
|
africa
|
asia
|
europe
|
latin america
|
middle east
|
business
|
world sport
|
entertainment
|
tech
|
travel
|
ireport
tools  widgets
|
podcasts
|
blogs
|
cnn mobile
|
my profile
|
e-mail alerts
|
cnn radio
|
cnn shop
|
site map
|
cnn partner hotels
cnn en espaol
|
cnn chile
|
cnn expansion
|
|
|
|
cnn tv
|
hln
|
transcripts
2010 cable news network.
turner broadcasting system, inc.
all rights reserved.
terms of service
|
privacy guidelines
|
advertising practices
|
advertise with us
|
about us
|
contact us
|
help

우리 분석 하고 설명 하 자.
numberWords 는 최종 숫자 문자열 의 집합 (모두 숫자) 입 니 다.
forwards Words 는 numberWords 가 표시 하 는 디지털 문자 시퀀스 앞 방향 단어 집합 입 니 다.
backwards Words 는 numberWords 가 표시 하 는 디지털 문자 시퀀스 에 대응 한 후 단어 로 집합 합 니 다.
위의 결 과 는 포맷 하면 쉽게 알 수 있다.
4. 567913. 위 에서 얻 은 웹 페이지 의 텍스트 내용 을 보면 첫 번 째 점수 가 가장 높 고 전화번호 가 확실 하 며 두 번 째 는 팩스 번호 이다.
마지막 으로 우리 가 얻 은 전화 번 호 를 더욱 정확하게 하려 면 여러 가지 방식 으로 선별 하고 검증 할 수 있 으 며 어느 정도 에 식 별 된 전화번호 의 정밀 도 를 높 일 수 있다.

좋은 웹페이지 즐겨찾기