2012-07-28 20 views
6

मेरे पास एक चरित्र वेक्टर है जो pdftotext (कमांड लाइन उपकरण) के माध्यम से कुछ पीडीएफ स्क्रैपिंग की फ़ाइल है।यह व्हाइटस्पेस छुपा कहाँ है?

सबकुछ अच्छी तरह से रेखांकित है (आनंदपूर्वक)। हालांकि, वेक्टर खाली स्थान के का एक प्रकार है कि मेरे नियमित अभिव्यक्ति eludes से छलनी किया गया है:

> test 
[1] "Address:"    "Clinic Information:" "Store "    "351 South Washburn" "Aurora Quick Care"  
[6] "Info"     "St. Oshkosh, WI 54904" "Phone: 920‐232‐0718" "Pewaukee" 

> grepl("[0-9]+ [A-Za-z ]+",test) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

> dput(test) 
c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
"Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
"Pewaukee") 

> test.pasted <- c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
+     "Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
+     "Pewaukee") 

> grepl("[0-9]+ [A-Za-z ]+",test.pasted) 
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 

> Encoding(test) 
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" 

> Encoding(test.pasted) 
[1] "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "unknown" "UTF-8" "unknown" 

जाहिर है वहाँ कुछ चरित्र है कि dput में नहीं सौंपा जा रहा है, नीचे दिए गए प्रश्न के रूप में:

How to properly dput internationalized text?

मैं पूरे वेक्टर की प्रतिलिपि/पेस्ट नहीं कर सकता .... मैं इस गैर-व्हाइटस्पेस व्हाइटस्पेस को कैसे खोज और नष्ट कर सकता हूं?

संपादित

जाहिर है मैं भी स्पष्ट करने के लिए, क्योंकि जवाब हर जगह हैं पास नहीं था। यहाँ एक और भी आसान परीक्षण का मामला है:

> grepl("Clinic Information:", test[2]) 
[1] FALSE 
> grepl("Clinic Information:", "Clinic Information:") # Where the second phrase is copy/pasted from the screen 
[1] TRUE 

वहाँ शब्द "क्लिनिक" और "सूचना" स्क्रीन पर और dput उत्पादन में छपी के बीच एक भी जगह नहीं है, लेकिन जो कुछ भी स्ट्रिंग में है एक मानक स्थान नहीं है । मेरा लक्ष्य इसे खत्म करना है ताकि मैं उस तत्व को सही ढंग से grep कर सकूं।

+0

वह व्हाइटस्पेस स्वयं वेक्टर में नहीं है, यह वैसे ही प्रदर्शित होता है। –

+0

'लापली (टेस्ट [4], utf8ToInt) पर एक नज़र डालें और देखें कि वहां कोई बड़ी संख्या है या नहीं। –

+0

@AlanCurry '> लापरवाही (परीक्षण [4], utf8ToInt) [1] 51 53 49 160 83 111 117 116 104 160 87 97 115 104 98 117 114 110' –

उत्तर

5

एक जवाब के लिए मेरी टिप्पणी को अपग्रेड करना:

आपका स्ट्रिंग एक गैर तोड़ने अंतरिक्ष (U + 00A0) जो एक सामान्य अंतरिक्ष में अनुवाद किया गया जब आप इसे चिपकाया में शामिल है। यूनिकोड में सभी अजीब अंतरिक्ष की तरह वर्णों का मिलान एक पर्ल शैली नियमित अभिव्यक्ति के साथ आसान है:

grepl("[0-9]+\\p{Zs}[A-Za-z ]+", test, perl=TRUE) 

पर्ल regexp वाक्य रचना \p{categoryName} है, अतिरिक्त बैकस्लैश एक स्ट्रिंग एक बैकस्लैश युक्त की वाक्य रचना का हिस्सा है, और "जेड" "सेपरेटर" यूनिकोड श्रेणी, "स्पेस" उपश्रेणी है। केवल यू +00 ए 0 चरित्र के लिए एक आसान तरीका

grepl("[0-9]+[ \\xa0][A-Za-z ]+", test) 
+0

मैं उलझन में हूँ। परीक्षण [2] वैसे भी मेल नहीं खाएगा, इसमें [0-9] भाग से मेल खाने के लिए इसमें कोई अंक नहीं है। –

+0

आप बिल्कुल सही हैं। इसे अंधाधुंध चलाने से पहले रेगेक्स पढ़ना चाहिए था। एक बार जब मैं अपमानजनक अंक प्राप्त करता हूं, तो पूरी तरह से काम करता है, धन्यवाद! –

1

मुझे लगता है कि आप पीछे की ओर और सफेद जगह का नेतृत्व करने के बाद हैं। यदि ऐसा है तो शायद इस समारोह काम करेगा: के रूप में

clean <- function(text) { 
    gsub("\\s+", " ", gsub("\r|\n|\t", " ", text)) 
} 

तो साफ उपयोग करना और फिर ट्रिम:

Trim <- function (x) gsub("^\\s+|\\s+$", "", x) 

इसके अलावा टैब और इस तरह के पर नज़र रखने के लिए और यह उपयोगी हो सकता है

Trim(clean(test)) 

इसके अलावा पर होना एम डैश के लिए बाहर देखने (-) और एम डैश (-)

+0

मुझे यकीन नहीं है कि क्या मैं समस्या को सही ढंग से समझता हूं। –

0
test <- c("Address:", "Clinic Information:", "Store ", "351 South Washburn", 
"Aurora Quick Care", "Info", "St. Oshkosh, WI 54904", "Phone: 920‐232‐0718", 
"Pewaukee") 

> grepl("[0-9]+ [A-Za-z ]+",test) 
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 


library(stringr) 
test2 <- str_trim(test, side = "both") 

> grepl("[0-9]+ [A-Za-z ]+",test2) 
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
# So there were no spaces in the vector, just the screen output in this case. 
1

मुझे व्हाइटस्पेस के बारे में कुछ भी असामान्य दिखाई नहीं देता है, लेकिन फोन नंबरों में डैश U+2010 (HYPHEN) हैं, ASCII हाइफ़न (U+002D) नहीं।

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