2014-05-19 44 views
-2

在R中我想執行文本分析並查找數據中的傳真號碼。除了數字模式匹配(由於具有類似樣式的電話號碼,它不會在這裏工作),我想用一些技術從文本中提取傳真號碼。 Patters是:R從文本中提取信息傳真:(號碼)

Fax (tab) : 9890000 
Fax:89182828 
Fax : 65535933 
FAX (+85) 0449 0279 
Fax: (85) 6336 7926 
Fax :  65535933 

輸入ID:515我有這個問題,我的機器。請給我回來的解決方案。 -

問候,

Shiny, 
Tel: 65535933 
Fax: 65938933 

結果應該只有傳真號碼不是電話號碼。傳真號碼可以採用以上所有格式 - ID - 515
傳真 - 65938933。

+1

你對圖案'ID - 515'有什麼意義...只需查找傳真,然後匹配它後面的圖案。你有嘗試過什麼嗎? – hwnd

+0

是的,我做到了。我嘗試了一些正則表達式來做同樣的事情。 ID 515只是結果格式。它可能只是傳真號碼 – user3619015

回答

0

與您提供的示例數據,這個正則表達式應該工作

test<-c("Fax \t : 9890000", 
    "Fax:89182828", 
    "Fax : 65535933", 
    "FAX (+85) 0449 0279", 
    "Fax: (85) 6336 7926", 
    "Phone: (85) 6336 7926", 
    "Fax :  65535933") 

matches<-regexpr("fax\\s*:?\\s*(.*)",test, ignore.case=T, perl=T) 
capmathces<-regcapturedmatches(test,matches) 
faxnums<-unlist(lapply(capmathces, function(x) if (length(x)>0) x[1] else NA)) 
cbind(faxnums, test) 

# Results: 
#  faxnums   test     
# [1,] "9890000"   "Fax \t : 9890000"  
# [2,] "89182828"  "Fax:89182828"   
# [3,] "65535933"  "Fax : 65535933"  
# [4,] "(+85) 0449 0279" "FAX (+85) 0449 0279" 
# [5,] "(85) 6336 7926" "Fax: (85) 6336 7926" 
# [6,] NA    "Phone: (85) 6336 7926" 
# [7,] "65535933"  "Fax :  65535933" 

這裏我使用的輔助函數regcapturedmatches但你也可以使用捕獲的比賽數據和自己提取它。

您可能必須根據您將原始數據饋送到此功能的精確程度進行定製。我不知道你是否傳遞了一個完整的文本字符串與嵌入的新行,或者如果你傳遞一個行向量。

+0

感謝您的答案,但我不明白我怎麼能在我的代碼中使用regcapturedmatches。錯誤:找不到函數「regcapturedmatches」。我在程序中調用了代碼。或者用delim讀取代碼regcapturedmatches =「\\ code \\ regcapturedmatches.R」 – user3619015

+0

如果您將該代碼放入名爲'regcapturedmatches.R'的文件中,則可以使用source(「regcapturedmatches.R」)加載它'默認情況下它會查看你當前的工作目錄(見'getwd()'),所以如果你指定了一個相對路徑,它應該是相對於當前工作目錄。 – MrFlick

+0

非常感謝 – user3619015