2011-03-15 5 views
6
나는 현재 저자 제휴 (PubMed의 기사) 내 샘플 데이터의 모양에서 국가 이름을 추출의 가능성을 탐구하고

:추출 국가 이름

Mechanical and Production Engineering Department, National University of Singapore.

Cancer Research Campaign Mammalian Cell DNA Repair Group, Department of Zoology, Cambridge, U.K.

Cancer Research Campaign Mammalian Cell DNA Repair Group, Department of Zoology, Cambridge, UK.

Lilly Research Laboratories, Eli Lilly and Company, Indianapolis, IN 46285.

처음에 구두점을 제거하고 벡터를 단어로 나눈 다음 Wikipedia의 국가 이름 목록과 비교를 시도했지만 성공하지 못했습니다.

아무도 나에게 더 나은 방법을 제안 할 수 있습니까? 나는 더 많은 분석을해야하고 그래픽을 R에 생성해야하므로 R의 솔루션을 선호합니다.

+1

R 외부에서 파일을 전처리하고 CSV로 저장 한 다음 R을 나머지 파일로 사용하면 더 잘 수행 할 수 있습니다. Google Refine은 이러한 종류의 직업을위한 훌륭한 도구입니다. – edmz

+0

'Google Refine'도 잘 작동합니다! 제안 해 주셔서 감사합니다! –

답변

6

몇 가지 방법을 시작할 수있는 간단한 해결책이 있습니다. 지도 패키지에 도시 및 국가 데이터가 포함 된 데이터베이스를 사용합니다. 더 나은 데이터베이스를 확보 할 수 있다면 코드를 수정하는 것이 간단해야합니다.

[[1]] 
[1] "Singapore" 

[[2]] 
[1] "Cambridge" 

[[3]] 
[1] "Cambridge" 

[[4]] 
[1] "Indianapolis" 

그리고 국가에 대한 결과 : 당신이 뭔가를 할 수있을 수있는 데이터 정리의 비트와 함께

[[1]] 
[1] "Singapore" 

[[2]] 
[1] "UK" 

[[3]] 
[1] "UK" 

[[4]] 
character(0) 

library(maps) 
library(plyr) 

# Load data from package maps 
data(world.cities) 

# Create test data 
aa <- c(
    "Mechanical and Production Engineering Department, National University of Singapore.", 
    "Cancer Research Campaign Mammalian Cell DNA Repair Group, Department of Zoology, Cambridge, U.K.", 
    "Cancer Research Campaign Mammalian Cell DNA Repair Group, Department of Zoology, Cambridge, UK.", 
    "Lilly Research Laboratories, Eli Lilly and Company, Indianapolis, IN 46285." 
) 

# Remove punctuation from data 
caa <- gsub(aa, "[[:punct:]]", "") ### *Edit* 

# Split data at word boundaries 
saa <- strsplit(caa, " ") 

# Match on cities in world.cities 
# Assumes that if multiple matches, the last takes precedence, i.e. max() 
llply(saa, function(x)x[max(which(x %in% world.cities$name))]) 

# Match on country in world.countries 
llply(saa, function(x)x[which(x %in% world.cities$country.etc)]) 

는 도시에 대한 결과입니다.

+0

외부 지오 코딩 서비스를 사용하면 네 번째 것을 발견 할 수 있습니다. 그러나 솔루션이 매우 좋으며 R 내부에 머물러 있습니다. 투표가 남아있는 경우 upvoted했을 것입니다 :-) – juba

+0

@juba 감사합니다. 이 솔루션을 확장 할 수 있습니다. 예를 들어 도시가 있지만 국가가 아닌 경우 세계에서 발견 된 도시의 국가를 검색 할 수 있습니다.도시 # – Andrie

+0

'caa <-gsub ("[[: punct :] \ n]", "", aa) # 작품'str_replace_all'도 작동하지 않았습니다.'llply'를'lapply'로 대체해야합니다. @Andrie –

1

지형 정보를 분리하고 (예 : 첫 번째 코마까지 모든 것을 삭제하여) 지오 코딩 서비스에 결과를 제출하기 위해 문자열을 분리 할 수 ​​있습니다.

예를 들어, Google 지오 코딩 API를 사용하면 주소를 보내고 해당 지역과 해당 지리적 정보 (예 : 국가)를 가져올 수 있습니다. 예를 들어, 나는 그것을 할 수있는 준비가 만든 R 패키지가 있다고 생각하지 않습니다,하지만 당신은 여기에 몇 가지 기능을 찾을 수 있습니다

:

Geocoding in R with Google Maps

루비와 같은 다른 언어로 확장도 있습니다

http://geokit.rubyforge.org/

정확하게 기억하면 관측 수에 따라 다르지만 예를 들어 무료 Google API는 약 200 개의 주소/IP/일로 제한됩니다.

관련 문제