आर में तारों के स्वचालित शब्दकोष

भूखंडों में लंबे तार हमेशा आकर्षक नहीं होते हैं। आर में संक्षिप्त नाम बनाने का सबसे छोटा तरीका क्या है? उदाहरण के लिए, "हैलो वर्ल्ड" को "एचडब्ल्यू", और अधिमानतः अद्वितीय शब्दकोष होना है।

कार्य संक्षेप में है, लेकिन यह प्रत्येक शब्द के पहले अक्षर लेने के बजाय वाक्यांश से कुछ अक्षर हटा देता है।

0
@AnandaMahto शायद एक दूसरा पत्र जोड़कर, "हैलो वर्ल्ड" → "हेडब्ल्यू" जैसे "एचडब्ल्यू" पर कब्जा कर लिया गया है?
जोड़ा लेखक Anton Tarasenko, स्रोत
आप डुप्लिकेट संक्षेपों से निपटने का प्रस्ताव कैसे देते हैं?
जोड़ा लेखक A5C1D2H2I1M1N2O1R2T1, स्रोत
@ChinmayPatil, संक्षेप इसे संभालने में सक्षम होना चाहिए ठीक है, लेकिन यदि आप फ़ंक्शन के लिए कोड देखते हैं, तो यह हमारे उत्तरों में से कहीं अधिक शामिल है :-)
जोड़ा लेखक A5C1D2H2I1M1N2O1R2T1, स्रोत
@ एंटन दूसरे पत्र को जोड़ना वास्तव में बुरा विचार है क्योंकि इससे कई रिकर्सिव लूप हो सकते हैं।
जोड़ा लेखक Chinmay Patil, स्रोत

2 उत्तर

strsplit , substr , और make.unique के संयोजन का उपयोग करने का एक आसान तरीका होगा।

यहां एक उदाहरण समारोह है जिसे लिखा जा सकता है:

makeInitials <- function(charVec) {
  make.unique(vapply(strsplit(toupper(charVec), " "), 
                     function(x) paste(substr(x, 1, 1), collapse = ""), 
                     vector("character", 1L)))
}

इसका परीक्षण करें:

X <- c("Hello World", "Home Work", "holidays with children", "Hello Europe")
makeInitials(X)
# [1] "HW"   "HW.1" "HWC"  "HE"  

उस ने कहा, मुझे लगता है कि यदि आप इसके कुछ तर्कों का उपयोग करते हैं तो संक्षिप्त पर्याप्त होना चाहिए:

abbreviate(X, minlength=1)
#            Hello World              Home Work holidays with children           Hello Europe 
#                  "HlW"                  "HmW"                  "hwc"                   "HE" 
0
जोड़ा

Using regex you can do following. The regex pattern ((?<=\\s).|^.) looks for any letter followed by space or first letter of the string. Then we just paste resulting vectors using collapse argument to get first letter based acronym. And as Ananda suggested, if you want to make unique pass the result through make.unique.

X <- c("Hello World", "Home Work", "holidays with children")
sapply(regmatches(X, gregexpr(pattern = "((?<=\\s).|^.)", text = X, perl = T)), paste, collapse = ".")
## [1] "H.W"   "H.W"   "h.w.c"

# If you want to make unique
make.unique(sapply(regmatches(X, gregexpr(pattern = "((?<=\\s).|^.)", text = X, perl = T)), paste, collapse = "."))
## [1] "H.W"   "H.W.1" "h.w.c"
0
जोड़ा