TypeScriptã®åã·ã¹ãã ã䜿çšããæ€çŽ¢ã¢ã«ãŽãªãºã ã®å®è£ ãæ¢æ±ããæ å ±æ€çŽ¢ã匷åããŸããã€ã³ããã¯ã¹äœæãã©ã³ãã³ã°ãå¹ççãªæ€çŽ¢æè¡ã«ã€ããŠåŠã³ãŸãã
TypeScriptæ€çŽ¢ã¢ã«ãŽãªãºã ïŒæ å ±æ€çŽ¢ã®åå®è£
ãœãããŠã§ã¢éçºã®é åã§ã¯ãå¹ççãªæ å ±æ€çŽ¢ãæãéèŠã§ããæ€çŽ¢ã¢ã«ãŽãªãºã ã¯ãeã³ããŒã¹ã®è£œåæ€çŽ¢ãããã¬ããžããŒã¹ã®æ€çŽ¢ãŸã§ããããããã®ãåãããŠããŸããTypeScriptã¯ããã®å ç¢ãªåã·ã¹ãã ã«ããããããã®ã¢ã«ãŽãªãºã ãå®è£ ããã³æé©åããããã®åŒ·åãªãã©ãããã©ãŒã ãæäŸããŸãããã®ããã°æçš¿ã§ã¯ãTypeScriptã®åã·ã¹ãã ãæŽ»çšããŠãåå®å šã§é«æ§èœããã€ä¿å®å¯èœãªæ€çŽ¢ãœãªã¥ãŒã·ã§ã³ãäœæããæ¹æ³ãæ¢ããŸãã
æ å ±æ€çŽ¢ã®æŠå¿µãçè§£ãã
TypeScriptã®å®è£ ã«å ¥ãåã«ãæ å ±æ€çŽ¢ã®äž»èŠãªæŠå¿µãå®çŸ©ããŸãããã
- ããã¥ã¡ã³ãïŒæ€çŽ¢å¯Ÿè±¡ãšãªãæ å ±ã®åäœããããã¯ãããã¹ããã¡ã€ã«ãããŒã¿ããŒã¹ã¬ã³ãŒããWebããŒãžããŸãã¯ãã®ä»ã®æ§é åããŒã¿ã§ããå¯èœæ§ããããŸãã
- ã¯ãšãªïŒé¢é£ããããã¥ã¡ã³ããèŠã€ããããã«ãŠãŒã¶ãŒãéä¿¡ããæ€çŽ¢èªå¥ã
- ã€ã³ããã¯ã¹äœæïŒå¹ççãªæ€çŽ¢ãå¯èœã«ããããŒã¿æ§é ãäœæããããã»ã¹ãäžè¬çãªã¢ãããŒãã¯ãåèªãããããçŸããããã¥ã¡ã³ãã«ãããã³ã°ãã転眮ã€ã³ããã¯ã¹ãäœæããããšã§ãã
- ã©ã³ãã³ã°ïŒã¯ãšãªãšã®é¢é£æ§ã«åºã¥ããŠåããã¥ã¡ã³ãã«ã¹ã³ã¢ãå²ãåœãŠãããã»ã¹ãã¹ã³ã¢ãé«ãã»ã©ãé¢é£æ§ãé«ãããšã瀺ããŸãã
- é¢é£æ§ïŒã¯ãšãªã§è¡šçŸãããŠããããã«ãããã¥ã¡ã³ãããŠãŒã¶ãŒã®æ å ±ããŒãºãã©ã®çšåºŠæºãããŠãããã®å°ºåºŠã
æ€çŽ¢ã¢ã«ãŽãªãºã ã®éžæ
ããã€ãã®æ€çŽ¢ã¢ã«ãŽãªãºã ãååšããããããã«ç¬èªã®é·æãšçæããããŸããäžè¬çãªéžæè¢ã«ã¯æ¬¡ã®ãã®ããããŸãã
- ç·åœ¢æ¢çŽ¢ïŒæãåçŽãªã¢ãããŒãã§ãåããã¥ã¡ã³ããå埩åŠçããŠã¯ãšãªãšæ¯èŒããŸããããã¯ãå€§èŠæš¡ãªããŒã¿ã»ããã§ã¯éå¹ççã§ãã
- äºåæ¢çŽ¢ïŒããŒã¿ããœãŒãããå¿ èŠãããã察æ°çãªæ€çŽ¢æéãå¯èœã§ãããœãŒããããé åãŸãã¯ããªãŒã®æ€çŽ¢ã«é©ããŠããŸãã
- ããã·ã¥ããŒãã«ã«ãã¯ã¢ããïŒå®æ°æéã®å¹³åæ€çŽ¢è€é床ãæäŸããŸãããããã·ã¥é¢æ°ã®è¡çªãæ éã«æ€èšããå¿ èŠããããŸãã
- 転眮ã€ã³ããã¯ã¹æ€çŽ¢ïŒè»¢çœ®ã€ã³ããã¯ã¹ã䜿çšããŠãç¹å®ã®ããŒã¯ãŒããå«ãããã¥ã¡ã³ãããã°ããèå¥ãããããé«åºŠãªææ³ã
- ãã«ããã¹ãæ€çŽ¢ãšã³ãžã³ïŒäŸïŒElasticsearchãLuceneïŒïŒå€§èŠæš¡ãªããã¹ãæ€çŽ¢åãã«é«åºŠã«æé©åãããŠãããã¹ããã³ã°ãã¹ãããã¯ãŒãã®åé€ããã¡ãžãŒãããã³ã°ãªã©ã®æ©èœãæäŸããŸãã
æé©ãªéžæã¯ãããŒã¿ã»ããã®ãµã€ãºãæŽæ°ã®é »åºŠãããã³ç®çã®æ€çŽ¢ããã©ãŒãã³ã¹ãªã©ã®èŠå ã«ãã£ãŠç°ãªããŸãã
TypeScriptã§ã®åºæ¬çãªè»¢çœ®ã€ã³ããã¯ã¹ã®å®è£
TypeScriptã§åºæ¬çãªè»¢çœ®ã€ã³ããã¯ã¹ã®å®è£ ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ããŸãããããã®äŸã§ã¯ãããã¹ãããã¥ã¡ã³ãã®ã³ã¬ã¯ã·ã§ã³ã®ã€ã³ããã¯ã¹äœæãšæ€çŽ¢ã«çŠç¹ãåœãŠãŠããŸãã
ããŒã¿æ§é ã®å®çŸ©
ãŸããããã¥ã¡ã³ããšè»¢çœ®ã€ã³ããã¯ã¹ã衚ãããŒã¿æ§é ãå®çŸ©ããŸãã
interface Document {
id: string;
content: string;
}
interface InvertedIndex {
[term: string]: string[]; // Term -> List of document IDs
}
転眮ã€ã³ããã¯ã¹ã®äœæ
次ã«ãããã¥ã¡ã³ãã®ãªã¹ããã転眮ã€ã³ããã¯ã¹ãäœæãã颿°ãäœæããŸãã
function createInvertedIndex(documents: Document[]): InvertedIndex {
const index: InvertedIndex = {};
for (const document of documents) {
const terms = document.content.toLowerCase().split(/\s+/); // Tokenize the content
for (const term of terms) {
if (!index[term]) {
index[term] = [];
}
if (!index[term].includes(document.id)) {
index[term].push(document.id);
}
}
}
return index;
}
転眮ã€ã³ããã¯ã¹ã®æ€çŽ¢
次ã«ãã¯ãšãªã«äžèŽããããã¥ã¡ã³ãã®è»¢çœ®ã€ã³ããã¯ã¹ãæ€çŽ¢ãã颿°ãäœæããŸãã
function searchInvertedIndex(index: InvertedIndex, query: string): string[] {
const terms = query.toLowerCase().split(/\s+/);
let results: string[] = [];
if (terms.length > 0) {
results = index[terms[0]] || [];
// For multi-word queries, perform intersection of results (AND operation)
for (let i = 1; i < terms.length; i++) {
const termResults = index[terms[i]] || [];
results = results.filter(docId => termResults.includes(docId));
}
}
return results;
}
䜿çšäŸ
転眮ã€ã³ããã¯ã¹ã®äœ¿çšäŸã次ã«ç€ºããŸãã
const documents: Document[] = [
{ id: "1", content: "This is the first document about TypeScript." },
{ id: "2", content: "The second document discusses JavaScript and TypeScript." },
{ id: "3", content: "A third document focuses solely on JavaScript." },
];
const index = createInvertedIndex(documents);
const query = "TypeScript document";
const searchResults = searchInvertedIndex(index, query);
console.log("Search results for '" + query + "':", searchResults); // Output: ["1", "2"]
TF-IDFã䜿çšããæ€çŽ¢çµæã®ã©ã³ãã³ã°
åºæ¬çãªè»¢çœ®ã€ã³ããã¯ã¹ã®å®è£ ã§ã¯ãæ€çŽ¢èªå¥ãå«ãããã¥ã¡ã³ããè¿ãããŸãããé¢é£æ§ã«åºã¥ããŠã©ã³ã¯ä»ããããŸãããæ€çŽ¢å質ãåäžãããããã«ãTF-IDFïŒTerm Frequency-Inverse Document FrequencyïŒã¢ã«ãŽãªãºã ã䜿çšããŠçµæãã©ã³ã¯ä»ãã§ããŸãã
TF-IDFã¯ãããã¥ã¡ã³ãå ã§ã®çšèªã®éèŠåºŠãããã¹ãŠã®ããã¥ã¡ã³ãã§ã®éèŠåºŠãšæ¯èŒããŠæž¬å®ããŸããç¹å®ã®ããã¥ã¡ã³ãã«ã¯é »ç¹ã«è¡šç€ºãããããä»ã®ããã¥ã¡ã³ãã«ã¯ã»ãšãã©è¡šç€ºãããªãçšèªã¯ãããé¢é£æ§ãé«ããšèŠãªãããŸãã
Term FrequencyïŒTFïŒã®èšç®
Term frequencyã¯ãããã¥ã¡ã³ãå ã®çšèªã®åºçŸåæ°ã§ãããããã¥ã¡ã³ãå ã®çšèªã®ç·æ°ã§æ£èŠåãããŠããŸãã
function calculateTermFrequency(term: string, document: Document): number {
const terms = document.content.toLowerCase().split(/\s+/);
const termCount = terms.filter(t => t === term).length;
return termCount / terms.length;
}
Inverse Document FrequencyïŒIDFïŒã®èšç®
Inverse document frequencyã¯ããã¹ãŠã®ããã¥ã¡ã³ãã§çšèªãã©ãã ããŸãã§ããããæž¬å®ããŸããããã¯ãããã¥ã¡ã³ãã®ç·æ°ããçšèªãå«ãããã¥ã¡ã³ãã®æ°ã§å²ã£ããã®ã®å¯Ÿæ°ãšããŠèšç®ãããŸãã
function calculateInverseDocumentFrequency(term: string, documents: Document[]): number {
const documentCount = documents.length;
const documentsContainingTerm = documents.filter(document =>
document.content.toLowerCase().split(/\s+/).includes(term)
).length;
return Math.log(documentCount / (1 + documentsContainingTerm)); // Add 1 to avoid division by zero
}
TF-IDFã¹ã³ã¢ã®èšç®
ããã¥ã¡ã³ãå ã®çšèªã®TF-IDFã¹ã³ã¢ã¯ããã®TFå€ãšIDFå€ã®ç©ã«ãããŸããã
function calculateTfIdf(term: string, document: Document, documents: Document[]): number {
const tf = calculateTermFrequency(term, document);
const idf = calculateInverseDocumentFrequency(term, documents);
return tf * idf;
}
ããã¥ã¡ã³ãã®ã©ã³ãã³ã°
ã¯ãšãªãšã®é¢é£æ§ã«åºã¥ããŠããã¥ã¡ã³ããã©ã³ã¯ä»ãããã«ã¯ãåããã¥ã¡ã³ãã®ã¯ãšãªå ã®åçšèªã®TF-IDFã¹ã³ã¢ãèšç®ããã¹ã³ã¢ãåèšããŸããåèšã¹ã³ã¢ãé«ãããã¥ã¡ã³ãã¯ãããé¢é£æ§ãé«ããšèŠãªãããŸãã
function rankDocuments(query: string, documents: Document[]): { document: Document; score: number }[] {
const terms = query.toLowerCase().split(/\s+/);
const rankedDocuments: { document: Document; score: number }[] = [];
for (const document of documents) {
let score = 0;
for (const term of terms) {
score += calculateTfIdf(term, document, documents);
}
rankedDocuments.push({ document, score });
}
rankedDocuments.sort((a, b) => b.score - a.score); // Sort in descending order of score
return rankedDocuments;
}
TF-IDFã®äœ¿çšäŸ
const rankedResults = rankDocuments(query, documents);
console.log("Ranked search results for '" + query + "':");
rankedResults.forEach(result => {
console.log(`Document ID: ${result.document.id}, Score: ${result.score}`);
});
ã»ãã³ãã£ãã¯æ€çŽ¢ã®ããã®ã³ãµã€ã³é¡äŒŒåºŠ
TF-IDFã¯ããŒã¯ãŒãããŒã¹ã®æ€çŽ¢ã«å¹æçã§ãããåèªéã®ã»ãã³ãã£ãã¯ãªé¡äŒŒæ§ãæããŸãããã³ãµã€ã³é¡äŒŒåºŠã䜿çšããŠãããã¥ã¡ã³ããã¯ãã«ãæ¯èŒã§ããŸããåãã¯ãã«ã¯ãããã¥ã¡ã³ãå ã®åèªã®é »åºŠã衚ããŸããåèªã®ååžãé¡äŒŒããŠããããã¥ã¡ã³ãã¯ãã³ãµã€ã³é¡äŒŒåºŠãé«ããªããŸãã
ããã¥ã¡ã³ããã¯ãã«ã®äœæ
ãŸãããã¹ãŠã®ããã¥ã¡ã³ãã«ããããã¹ãŠã®åºæã®åèªã®èªåœãäœæããå¿ èŠããããŸããæ¬¡ã«ãåããã¥ã¡ã³ãããã¯ãã«ãšããŠè¡šãããšãã§ããŸããåèŠçŽ ã¯ãèªåœå ã®åèªã«å¯Ÿå¿ãããã®å€ã¯ãããã¥ã¡ã³ãå ã®ãã®åèªã®çšèªé »åºŠãŸãã¯TF-IDFã¹ã³ã¢ã衚ããŸãã
function createVocabulary(documents: Document[]): string[] {
const vocabulary = new Set();
for (const document of documents) {
const terms = document.content.toLowerCase().split(/\s+/);
terms.forEach(term => vocabulary.add(term));
}
return Array.from(vocabulary);
}
function createDocumentVector(document: Document, vocabulary: string[], useTfIdf: boolean, allDocuments: Document[]): number[] {
const vector: number[] = [];
for (const term of vocabulary) {
if(useTfIdf){
vector.push(calculateTfIdf(term, document, allDocuments));
} else {
vector.push(calculateTermFrequency(term, document));
}
}
return vector;
}
ã³ãµã€ã³é¡äŒŒåºŠã®èšç®
ã³ãµã€ã³é¡äŒŒåºŠã¯ã2ã€ã®ãã¯ãã«ã®ãããç©ãããããã®å€§ããã®ç©ã§å²ã£ããã®ãšããŠèšç®ãããŸãã
function cosineSimilarity(vectorA: number[], vectorB: number[]): number {
if (vectorA.length !== vectorB.length) {
throw new Error("Vectors must have the same length");
}
let dotProduct = 0;
let magnitudeA = 0;
let magnitudeB = 0;
for (let i = 0; i < vectorA.length; i++) {
dotProduct += vectorA[i] * vectorB[i];
magnitudeA += vectorA[i] * vectorA[i];
magnitudeB += vectorB[i] * vectorB[i];
}
magnitudeA = Math.sqrt(magnitudeA);
magnitudeB = Math.sqrt(magnitudeB);
if (magnitudeA === 0 || magnitudeB === 0) {
return 0; // Avoid division by zero
}
return dotProduct / (magnitudeA * magnitudeB);
}
ã³ãµã€ã³é¡äŒŒåºŠã«ããã©ã³ãã³ã°
ã³ãµã€ã³é¡äŒŒåºŠã䜿çšããŠããã¥ã¡ã³ããã©ã³ã¯ä»ãããã«ã¯ãã¯ãšãªã®ãã¯ãã«ãäœæãïŒããã¥ã¡ã³ããšããŠæ±ããŸãïŒã次ã«ã¯ãšãªãã¯ãã«ãšåããã¥ã¡ã³ããã¯ãã«éã®ã³ãµã€ã³é¡äŒŒåºŠãèšç®ããŸããã³ãµã€ã³é¡äŒŒåºŠãé«ãããã¥ã¡ã³ãã¯ãããé¢é£æ§ãé«ããšèŠãªãããŸãã
function rankDocumentsCosineSimilarity(query: string, documents: Document[], useTfIdf: boolean): { document: Document; similarity: number }[] {
const vocabulary = createVocabulary(documents);
const queryDocument: Document = { id: "query", content: query };
const queryVector = createDocumentVector(queryDocument, vocabulary, useTfIdf, documents);
const rankedDocuments: { document: Document; similarity: number }[] = [];
for (const document of documents) {
const documentVector = createDocumentVector(document, vocabulary, useTfIdf, documents);
const similarity = cosineSimilarity(queryVector, documentVector);
rankedDocuments.push({ document, similarity });
}
rankedDocuments.sort((a, b) => b.similarity - a.similarity); // Sort in descending order of similarity
return rankedDocuments;
}
ã³ãµã€ã³é¡äŒŒåºŠã®äœ¿çšäŸ
const rankedResultsCosine = rankDocumentsCosineSimilarity(query, documents, true); //Use TF-IDF for vector creation
console.log("Ranked search results (Cosine Similarity) for '" + query + "':");
rankedResultsCosine.forEach(result => {
console.log(`Document ID: ${result.document.id}, Similarity: ${result.similarity}`);
});
TypeScriptã®åã·ã¹ãã ã«ããå®å šæ§ãšä¿å®æ§ã®åäž
TypeScriptã®åã·ã¹ãã ã¯ãæ€çŽ¢ã¢ã«ãŽãªãºã ã®å®è£ ã«ããã€ãã®å©ç¹ãæäŸããŸãã
- åå®å šæ§ïŒTypeScriptã¯ãåã®å¶çŽã匷å¶ããããšã§ããšã©ãŒãæ©æã«æ€åºããã®ã«åœ¹ç«ã¡ãŸããããã«ãããã©ã³ã¿ã€ã äŸå€ã®ãªã¹ã¯ã軜æžãããã³ãŒãã®ä¿¡é Œæ§ãåäžããŸãã
- ã³ãŒãã®å®å šæ§ïŒIDEã¯ã倿°ãšé¢æ°ã®åã«åºã¥ããŠãããåªããã³ãŒãè£å®ãšææ¡ãæäŸã§ããŸãã
- ãªãã¡ã¯ã¿ãªã³ã°ã®ãµããŒãïŒTypeScriptã®åã·ã¹ãã ã«ããããšã©ãŒãçºçãããããšãªããã³ãŒããç°¡åã«ãªãã¡ã¯ã¿ãªã³ã°ã§ããŸãã
- ä¿å®æ§ã®åäžïŒåã¯ããã¥ã¡ã³ããæäŸããã³ãŒããçè§£ãããããä¿å®ããããããŸãã
åãšã€ãªã¢ã¹ãšã€ã³ã¿ãŒãã§ãŒã¹ã®äœ¿çš
åãšã€ãªã¢ã¹ãšã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšãããšãããŒã¿æ§é ãšé¢æ°ã®ã·ã°ããã£ã衚ãã«ã¹ã¿ã åãå®çŸ©ã§ããŸããããã«ãããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸãã以åã®äŸã§èŠãããã«ã`Document`ããã³`InvertedIndex`ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã³ãŒãã®æç¢ºããé«ããŸãã
åå©çšæ§ã®ããã®ãžã§ããªã¯ã¹
ãžã§ããªã¯ã¹ã䜿çšãããšãããŸããŸãªåã®ããŒã¿ã§åäœããåå©çšå¯èœãªæ€çŽ¢ã¢ã«ãŽãªãºã ãäœæã§ããŸããããšãã°ãæ°å€ãæååããŸãã¯ã«ã¹ã¿ã ãªããžã§ã¯ãã®é åãæ€çŽ¢ã§ããæ±çšæ€çޢ颿°ãäœæã§ããŸãã
ç°ãªãããŒã¿åãåŠçããããã®å€å¥ããããŠããªã³
å€å¥ããããŠããªã³ã䜿çšããŠãç°ãªãçš®é¡ã®ããã¥ã¡ã³ããŸãã¯ã¯ãšãªã衚ãããšãã§ããŸããããã«ãããããŸããŸãªããŒã¿åãåå®å šãªæ¹æ³ã§åŠçã§ããŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
æ€çŽ¢ã¢ã«ãŽãªãºã ã®ããã©ãŒãã³ã¹ã¯ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ããã§ã¯éèŠã§ããæ¬¡ã®æé©åææ³ãæ€èšããŠãã ããã
- å¹ççãªããŒã¿æ§é ïŒã€ã³ããã¯ã¹äœæãšæ€çŽ¢ã«é©åãªããŒã¿æ§é ã䜿çšããŸãã転眮ã€ã³ããã¯ã¹ãããã·ã¥ããŒãã«ãããã³ããªãŒã¯ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- ãã£ãã·ã³ã°ïŒé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããã£ãã·ã¥ããŠãç¹°ãè¿ãã®èšç®ã®å¿ èŠæ§ãæžãããŸãã`lru-cache`ã®ãããªã©ã€ãã©ãªãŸãã¯ã¡ã¢åæè¡ã®äœ¿çšã圹ç«ã¡ãŸãã
- éåææäœïŒéåææäœã䜿çšããŠãã¡ã€ã³ã¹ã¬ããã®ãããã¯ãåé¿ããŸããããã¯ãWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ç¹ã«éèŠã§ãã
- 䞊ååŠçïŒè€æ°ã®ã³ã¢ãŸãã¯ã¹ã¬ãããå©çšããŠãæ€çŽ¢ããã»ã¹ã䞊ååããŸãããã©ãŠã¶ã®Web WorkersãŸãã¯Node.jsã®ã¯ãŒã«ãŒã¹ã¬ãããæŽ»çšã§ããŸãã
- æé©åã©ã€ãã©ãªïŒããã¹ãåŠçã«ç¹åããã©ã€ãã©ãªïŒèªç¶èšèªåŠçïŒNLPïŒã©ã€ãã©ãªãªã©ïŒã®äœ¿çšãæ€èšããŠãã ããããããã®ã©ã€ãã©ãªã¯ãã¹ããã³ã°ãã¹ãããã¯ãŒãã®åé€ããã®ä»ã®ããã¹ãåææè¡ã®æé©åãããå®è£ ãæäŸã§ããŸãã
å®éã®ã¢ããªã±ãŒã·ã§ã³
TypeScriptæ€çŽ¢ã¢ã«ãŽãªãºã ã¯ãããŸããŸãªå®éã®ã·ããªãªã«é©çšã§ããŸãã
- eã³ããŒã¹æ€çŽ¢ïŒeã³ããŒã¹Webãµã€ãã§ã®è£œåæ€çŽ¢ã匷åãããŠãŒã¶ãŒãæ¢ããŠããã¢ã€ãã ããã°ããèŠã€ããããšãã§ããããã«ããŸããäŸãšããŠã¯ãAmazonãeBayããŸãã¯Shopifyã¹ãã¢ã§è£œåãæ€çŽ¢ããããšããããŸãã
- ãã¬ããžããŒã¹æ€çŽ¢ïŒãŠãŒã¶ãŒãããã¥ã¡ã³ããèšäºãããã³FAQãæ€çŽ¢ã§ããããã«ããŸããZendeskã®ãããªã«ã¹ã¿ããŒãµããŒãã·ã¹ãã ãŸãã¯ç€Ÿå ãã¬ããžããŒã¹ã§äœ¿çšãããŸãã
- ã³ãŒãæ€çŽ¢ïŒéçºè ãã³ãŒãããŒã¹å ã®ã³ãŒãã¹ããããã颿°ãããã³ã¯ã©ã¹ãèŠã€ããã®ãæ¯æŽããŸããVS Codeã®ãããªIDEãGitHubã®ãããªãªã³ã©ã€ã³ã³ãŒããªããžããªã«çµ±åãããŠããŸãã
- ãšã³ã¿ãŒãã©ã€ãºæ€çŽ¢ïŒããŒã¿ããŒã¹ããã¡ã€ã«ãµãŒããŒãããã³é»åã¡ãŒã«ã¢ãŒã«ã€ããªã©ãããŸããŸãªãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã å šäœã§æ å ±ã«ã¢ã¯ã»ã¹ããããã®çµ±äžãããæ€çŽ¢ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢æ€çŽ¢ïŒãŠãŒã¶ãŒããœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã§æçš¿ããŠãŒã¶ãŒãããã³ãããã¯ãæ€çŽ¢ã§ããããã«ããŸããäŸãšããŠã¯ãTwitterãFacebookãããã³Instagramã®æ€çŽ¢æ©èœããããŸãã
çµè«
TypeScriptã¯ãæ€çŽ¢ã¢ã«ãŽãªãºã ãå®è£ ããããã®åŒ·åã§åå®å šãªç°å¢ãæäŸããŸããTypeScriptã®åã·ã¹ãã ãæŽ»çšããããšã§ãéçºè ã¯å¹ åºãã¢ããªã±ãŒã·ã§ã³åãã®å ç¢ã§é«æ§èœããã€ä¿å®å¯èœãªæ€çŽ¢ãœãªã¥ãŒã·ã§ã³ãäœæã§ããŸããåºæ¬çãªè»¢çœ®ã€ã³ããã¯ã¹ãããTF-IDFãã³ãµã€ã³é¡äŒŒåºŠã®ãããªé«åºŠãªã©ã³ãã³ã°ã¢ã«ãŽãªãºã ãŸã§ãTypeScriptã¯éçºè ãå¹ççãã€å¹æçãªæ å ±æ€çŽ¢ã·ã¹ãã ãæ§ç¯ã§ããããã«ããŸãã
ãã®ããã°æçš¿ã§ã¯ãåºç€ãšãªãæŠå¿µãå®è£ ã®è©³çްãããã³ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãªã©ãTypeScriptæ€çŽ¢ã¢ã«ãŽãªãºã ã®å æ¬çãªæŠèŠãæäŸããŸããããããã®æŠå¿µãšæè¡ãçè§£ããããšã§ãéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãºãæºããæŽç·Žãããæ€çŽ¢ãœãªã¥ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã