2011-03-15 19 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.

शुरू में मैंने विराम चिह्नों को हटाने और वेक्टर को शब्दों में विभाजित करने की कोशिश की और फिर इसे विकिपीडिया से देश के नामों की सूची के साथ तुलना की लेकिन मैं इस पर सफल नहीं हूं।

क्या कोई मुझे कृपया ऐसा करने का बेहतर तरीका सुझा सकता है? मैं R में समाधान पसंद करूंगा क्योंकि मुझे आगे विश्लेषण करना है और R में ग्राफिक्स जेनरेट करना है।

+1

यदि आप आर के बाहर फ़ाइल को प्रीप्रोसेस करते हैं, तो इसे बेहतर बना सकते हैं, इसे सीएसवी के रूप में सहेजें और फिर बाकी के लिए आर का उपयोग करें। इस तरह की नौकरी के लिए 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

बाहरी भूगर्भ सेवा के साथ आपको चौथाई मिल सकता है, लेकिन आपका समाधान बहुत अच्छा है और आर के अंदर रहता है। अगर मेरे पास कुछ वोट शेष थे तो मैं उभरा होता :-) – juba

+0

@ जुबा धन्यवाद। कोई भी इस समाधान पर विस्तार कर सकता है। उदाहरण के लिए, यदि कोई शहर पाया जाता है लेकिन कोई देश नहीं है, तो कोई भी दुनिया में पाए गए शहर के लिए देश को देख सकता है।शहर – Andrie

+0

'caa <-gsub (" [[: punct:] \ n] "," "aa aa) # works'' str_replace_all' काम नहीं कर रहा था 'lplyly' को' lapply' के साथ बदला जाना चाहिए बहुत धन्यवाद @Andrie –

1

भौगोलिक जानकारी को अलग करने के लिए अपने तारों को विभाजित करने का एक तरीका हो सकता है (उदाहरण के लिए पहले कोमा तक सब कुछ हटाकर), और फिर परिणाम को जियोकोडिंग सेवा में सबमिट करें।

उदाहरण के लिए, Google geocoding API एक पता भेजने और स्थानीयकरण और संबंधित भौगोलिक सूचनाओं जैसे देश को वापस पाने की अनुमति देता है। मुझे नहीं लगता कि एक रेडीमेड आर यह करने के लिए पैकेज है, लेकिन आप कुछ कार्यों यहां पा सकते हैं, उदाहरण के लिए:

:

Geocoding in R with Google Maps

वहाँ भी इस तरह के रूबी के रूप में अन्य भाषाओं में विस्तार हैं

http://geokit.rubyforge.org/

यह भी आप टिप्पणियों की संख्या पर निर्भर करता है, उदाहरण के लिए मुक्त करने के लिए Google API/आईपी/दिन लगभग 200 adresses तक ही सीमित है, अगर मैं सही ढंग से याद है।

संबंधित मुद्दे