एनएलपी और टेक्स्ट एनालिटिक्स के दौरान, भविष्य कहनेवाला मॉडलिंग के लिए उपयोग करने के लिए शब्दों की एक दस्तावेज़ से कई प्रकार की विशेषताओं को निकाला जा सकता है। इनमें निम्नलिखित शामिल हैं।
ngrams
Word.txt से शब्दों का यादृच्छिक नमूना लें । नमूने में प्रत्येक शब्द के लिए, अक्षरों के हर संभव बाय-ग्राम को निकालें । उदाहरण के लिए, शब्द शक्ति में इन द्वि-ग्राम शामिल हैं: { st , tr , re , en , ng , gt , th }। द्वि-ग्राम द्वारा समूह और अपने कोष में प्रत्येक द्वि-ग्राम की आवृत्ति की गणना करें। अब त्रि-ग्राम के लिए एक ही काम करते हैं, ... सभी तरह से एन-ग्राम तक। इस बिंदु पर आपको अंग्रेजी शब्दों को बनाने के लिए रोमन अक्षरों के संयोजन के आवृत्ति वितरण का एक मोटा विचार है।
ngram + शब्द सीमाएँ
एक उचित विश्लेषण करने के लिए, आपको संभवत: किसी शब्द के प्रारंभ और अंत में n- ग्राम को इंगित करने के लिए टैग बनाने चाहिए, ( कुत्ता -> { ^ d , do , og , g ^ }) - यह आपको ध्वन्यात्मक / ऑर्थोग्राफ़िक पर कब्जा करने की अनुमति देगा बाधाएं जो अन्यथा छूट सकती हैं (उदाहरण के लिए, अनुक्रम एनजी मूल अंग्रेजी शब्द की शुरुआत में कभी नहीं हो सकता है, इस प्रकार अनुक्रम ^ एनजी अनुमेय नहीं है - एक कारण है कि वियतनामी के नाम जैसे नगुयेन अंग्रेजी बोलने वालों के लिए उच्चारण करना मुश्किल है) ।
ग्राम के इस संग्रह को शब्द_सेट करें । यदि आप आवृत्ति के अनुसार क्रमबद्ध करते हैं, तो आपका सबसे लगातार ग्राम सूची के शीर्ष पर होगा - ये अंग्रेजी शब्दों में सबसे आम अनुक्रमों को दर्शाएंगे। नीचे मैं शब्दों से पत्र ngrams निकालने के लिए पैकेज (ngram ) कोड का उपयोग करके कुछ (बदसूरत) कोड दिखाता हूं, फिर ग्रिड आवृत्तियों की गणना करता हूं:
#' Return orthographic n-grams for word
#' @param w character vector of length 1
#' @param n integer type of n-gram
#' @return character vector
#'
getGrams <- function(w, n = 2) {
require(ngram)
(w <- gsub("(^[A-Za-z])", "^\\1", w))
(w <- gsub("([A-Za-z]$)", "\\1^", w))
# for ngram processing must add spaces between letters
(ww <- gsub("([A-Za-z^'])", "\\1 \\2", w))
w <- gsub("[ ]$", "", ww)
ng <- ngram(w, n = n)
grams <- get.ngrams(ng)
out_grams <- sapply(grams, function(gram){return(gsub(" ", "", gram))}) #remove spaces
return(out_grams)
}
words <- list("dog", "log", "bog", "frog")
res <- sapply(words, FUN = getGrams)
grams <- unlist(as.vector(res))
table(grams)
## ^b ^d ^f ^l bo do fr g^ lo og ro
## 1 1 1 1 1 1 1 4 1 4 1
आपका कार्यक्रम इनपुट के रूप में पात्रों के एक आने वाले अनुक्रम को ले जाएगा, इसे पहले चर्चा के रूप में ग्राम में तोड़ दें और शीर्ष ग्राम की सूची की तुलना करें। जाहिर है आपको कार्यक्रम आकार की आवश्यकता को पूरा करने के लिए अपने शीर्ष एन पिक्स को कम करना होगा ।
व्यंजन और स्वर
एक अन्य संभावित विशेषता या दृष्टिकोण व्यंजन स्वर अनुक्रम को देखना होगा। मूल रूप से व्यंजन स्वर स्ट्रिंग्स (जैसे, पैनकेक -> CVCCVCV ) में सभी शब्दों को रूपांतरित करें और पहले से चर्चा की गई उसी रणनीति का पालन करें। यह कार्यक्रम शायद बहुत छोटा हो सकता है लेकिन यह सटीकता से ग्रस्त होगा क्योंकि यह उच्च-क्रम की इकाइयों में फोन को सार करता है।
nchar
एक अन्य उपयोगी विशेषता स्ट्रिंग की लंबाई होगी, क्योंकि वर्णों की संख्या बढ़ने पर वैध अंग्रेजी शब्दों की संभावना कम हो जाती है।
library(dplyr)
library(ggplot2)
file_name <- "words.txt"
df <- read.csv(file_name, header = FALSE, stringsAsFactors = FALSE)
names(df) <- c("word")
df$nchar <- sapply(df$word, nchar)
grouped <- dplyr::group_by(df, nchar)
res <- dplyr::summarize(grouped, count = n())
qplot(res$nchar, res$count, geom="path",
xlab = "Number of characters",
ylab = "Frequency",
main = "Distribution of English word lengths in words.txt",
col=I("red"))
त्रुटि विश्लेषण
इस प्रकार की मशीन द्वारा निर्मित त्रुटियों का प्रकार बकवास शब्द होना चाहिए - वे शब्द जो दिखते हैं जैसे वे अंग्रेजी शब्द होने चाहिए लेकिन जो नहीं हैं (उदाहरण के लिए, ghjrtg सही ढंग से खारिज कर दिया जाएगा (असली नकारात्मक) लेकिन भौंक गलत तरीके से अंग्रेजी शब्द के रूप में वर्गीकृत किया जाएगा। (सकारात्मक झूठी))।
दिलचस्प है, zyzzyvas को गलत तरीके से खारिज कर दिया जाएगा (झूठा नकारात्मक), क्योंकि zyzzyvas एक वास्तविक अंग्रेजी शब्द है (कम से कम words.txt के अनुसार ), लेकिन इसके ग्राम क्रम अत्यंत दुर्लभ हैं और इस प्रकार बहुत भेदभावपूर्ण शक्ति का योगदान करने की संभावना नहीं है।