यह निर्धारित कैसे करें कि चरित्र अनुक्रम अंग्रेजी शब्द या शोर है


11

भविष्य की भविष्यवाणी के लिए आप किस तरह की विशेषताओं को शब्दों की सूची से निकालने की कोशिश करेंगे, क्या यह मौजूदा शब्द है या सिर्फ पात्रों की गड़बड़ है?

वहाँ है कि मैंने पाया काम का वर्णन है वहाँ

आपको एक प्रोग्राम लिखना होगा जो उत्तर दे सके कि क्या एक दिया गया शब्द अंग्रेजी है। यह आसान होगा - आपको केवल शब्द को शब्दकोष में देखना होगा - लेकिन एक महत्वपूर्ण प्रतिबंध है: आपका कार्यक्रम 64 KiB से बड़ा नहीं होना चाहिए।

इसलिए, मुझे लगा कि समस्या को हल करने के लिए लॉजिस्टिक रिग्रेशन का उपयोग करना संभव होगा। मुझे डेटा-माइनिंग का बहुत अनुभव नहीं है, लेकिन यह कार्य मेरे लिए दिलचस्प है।

धन्यवाद।


अक्षर n- ग्राम।
इम्रे

इसे एक शब्दकोश में देखें? आप यहां क्या करने की कोशिश कर रहे हैं, यह स्पष्ट नहीं है। उदाहरण दो।
स्पेल्डमैन

क्षमा करें, शायद मैंने पूरी तरह से समस्या की व्याख्या नहीं की। कार्य का विवरण है जो मुझे वहां मिला है आपको एक कार्यक्रम लिखना होगा जो उत्तर दे सकता है कि क्या एक दिया गया शब्द अंग्रेजी है। यह आसान होगा - आपको केवल शब्द को शब्दकोष में देखना होगा - लेकिन एक महत्वपूर्ण प्रतिबंध है: आपका कार्यक्रम 64 KiB से बड़ा नहीं होना चाहिए। इसलिए, मुझे लगा कि समस्या को हल करने के लिए लॉजिस्टिक रिग्रेशन का उपयोग करना संभव होगा। मुझे डेटा-माइनिंग का बहुत अनुभव नहीं है, लेकिन यह कार्य मेरे लिए दिलचस्प है।
विटालि मिशचेंको

जवाबों:


13

एनएलपी और टेक्स्ट एनालिटिक्स के दौरान, भविष्य कहनेवाला मॉडलिंग के लिए उपयोग करने के लिए शब्दों की एक दस्तावेज़ से कई प्रकार की विशेषताओं को निकाला जा सकता है। इनमें निम्नलिखित शामिल हैं।

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 के अनुसार ), लेकिन इसके ग्राम क्रम अत्यंत दुर्लभ हैं और इस प्रकार बहुत भेदभावपूर्ण शक्ति का योगदान करने की संभावना नहीं है।


1
fyi - word.txt से सैंपल की जरूरत नहीं है, बस पूरी सूची का उपयोग करें (मैं cpl वर्षों के लिए बड़ी डेटा भूमि में रहा हूं, इसलिए मेरे मुंह से निकलने वाले पहले शब्द हमेशा "एक यादृच्छिक नमूना लें" योग्य हैं)।
ब्रैंडन लाउडरमिल्क

मुझे लगता है कि इस प्रतियोगिता के विजेता को कुछ अधिक अंतर्दृष्टि जोड़ने की संभावना है, हालांकि यह रणनीति के हिस्से के रूप में अच्छी तरह से शामिल हो सकता है। मुझे लगता है कि पूरी तरह से एनग्राम का उपयोग करने से कई झूठी सकारात्मकता पैदा हो जाएगी, क्योंकि परीक्षण विवरण का अर्थ है कि "विश्वसनीय" लेकिन गैर-अंग्रेजी शब्द परीक्षण सेट में हैं।
नील स्लेटर

आपके व्यंजन और स्वर रणनीति का एक सामान्यीकरण स्किप-ग्राम है
एम्रे

@BrandonLoudermilk आपके द्वारा साझा किए गए नमूनों के लिए अजगर कोड साझा करना संभव होगा?
Iam.Carrot
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.