ขอความช่วยเหลือเกี่ยวกับการตัดคำครับ
คือผมอยู่กลุ่มเดียวกับ วริษฐา ครับ
คือผมสงสัยเกี่ยวกับการใช้งานคำสั่ง preg_match
ครับคือผมพยายามอ่านจากเว็บของ php แล้วก็ยังไม่เข้าใจอยู่ดีครับย
คือคำสั่งนี้สามารถที่จะ get คำที่อยู่ ระหว่างกลาง คำที่เราเลือกได้ไหมครับ
เช่น คำว่า "(i)love<you" แล้วเรา เลือกคำว่า (i) กับ คำว่า <you
เพื่อให้ระบบ เก็บคำว่า love อย่างนี้น่ะครับ
คล้ายๆกับตัวอย่างนี้น่ะครับ
ที่เขาสามารถดึงแค่ www.php.net โดยตัด http:// กับ /index.html น่ะครับ
ผมคิดว่าน่าจะนำมาประยุกต์ใช้กับโปนเจกต์ของผมได้
แล้วก็อยากให้อธิบายโค้ดชุดนี้ด้วยครับ
<?php
if (preg_match('/.*<body>(.*)<\/body>.*/isu'), $html, $match) {
// print_r($match);
echo $match[1];
}
?>
ขอบพระคุณเป็นอย่างสูงเลยครับ
คือผมสงสัยเกี่ยวกับการใช้งานคำสั่ง preg_match
ครับคือผมพยายามอ่านจากเว็บของ php แล้วก็ยังไม่เข้าใจอยู่ดีครับย
คือคำสั่งนี้สามารถที่จะ get คำที่อยู่ ระหว่างกลาง คำที่เราเลือกได้ไหมครับ
เช่น คำว่า "(i)love<you" แล้วเรา เลือกคำว่า (i) กับ คำว่า <you
เพื่อให้ระบบ เก็บคำว่า love อย่างนี้น่ะครับ
คล้ายๆกับตัวอย่างนี้น่ะครับ
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
ที่เขาสามารถดึงแค่ www.php.net โดยตัด http:// กับ /index.html น่ะครับ
ผมคิดว่าน่าจะนำมาประยุกต์ใช้กับโปนเจกต์ของผมได้
แล้วก็อยากให้อธิบายโค้ดชุดนี้ด้วยครับ
<?php
if (preg_match('/.*<body>(.*)<\/body>.*/isu'), $html, $match) {
// print_r($match);
echo $match[1];
}
?>
ขอบพระคุณเป็นอย่างสูงเลยครับ
จากคำถาม .*<body>(.*)<\/body>.*
.* หมายถึงตัวอักษรตัวใดก็ได้มากว่า 1 ตัว
() ในที่นี้คือผลลัพท์ที่เราต้องการ
\/ เพราะ / เป็นตัวอักษรควบคุมจึงต้องมี \ นำหน้า
ความหมายของมันก็ตรงๆแหละครับ ตัวอักษรใดๆก็ได้ที่อยู่ระหว่าง body
ส่วนการตัดคำอย่างที่เธอต้องการ ผมว่าในทางปฏิบัติค่อนข้างยาก เนื่องจากหากเธอต้องการคำไหนเธอต้องเขียนคำสั่งเป็นรายคำไป เช่น ต้องการ body ก็ต้องเขียนคำสั่งของ body ต้องการ love ก็ต้องไปเขียนคำสั่งเฉพาะของ love เป็นต้น และถ้ามีหลายๆ คำล่ะ คำสั่งมิยาวเป็นหางว่าวแล้วก็ช้าหรอกเหรอ
สำหรับเทคนิคโดยทั่วๆไปที่ SE ใช้เขาจะไม่ใช้วิธีนี้ครับ เนื่องจากมันไม่มีประสิทธิภาพ ผมยกตัวอย่างเช่น
1.ใช้การตัดคำที่ สั้นๆ ออกก่อน
2.ตัดสัญลักษณ์ ซึ่งไม่มีความหมายออกก่อน (รวมถึง tag รูปภาพ หรืออะไรที่ไม่ใช่ข้อความ)
3.สนใจแต่คำที่มากกว่า 1 หรือ 2 ตัวอักษร เช่น i หรือ am ไม่ต้องไปสนใจมัน
4.ตัดคำต่างๆ ตามช่องว่างที่เหลือ
นอกจากนี้อาจใช้วิธีลิสต์รายการข้อความที่สนใจออกมาจำนวนหนึ่งก็ได้ ถ้าสามารถหาได้หมด แล้วทำการเปรียบเทียบเฉพาะคำที่สนใจ (แบบเดียวกับการตัดคำของ Browser)
แต่ที่ ผมลองมาทำ ตัวแปลที่ว่า $html คือ สตริงที่ดูดมาเก็บไว้ใช้ไหมครับ?
ผมลองแล้วมัน error
Parse error: syntax error, unexpected ',' in C:\xampp\htdocs\pj\dud.php on line 23
คือ if (preg_match('/.*<body>(.*)<\/body>.*/isu'), $html, $match) {
อยู่ที่บรรทัดที่ 23 พอดีอ่ะครับ
ผมทราบแล้วครับว่า error ตรงไหน ตรงที่ ( มันอยู่ผิดที่
พอแก้แล้วกลายเป็น
$content = file_get_contents($add);
if (preg_match('/.*<body>(.*)<\/body>.*/isu', $content, $match)) {
// print_r($match);
echo $match[1];
}else {
echo "<br> not front";
}
แต่ว่าผลลัพธ์มันก็ กลายเป็น not front ทุกทีเลยครับ
ปล. วิธีการที่ให้เป็นเพียงแนวทาง ในทางปฏิบัติ tag body อาจมี attribute ก็ได้ ซึ่งอาจต้องเพิ่มเติมความสามารถอื่นๆตามนั้นด้วย (ซึ่งต้องพึ่งพาความรู้เกี่ยวกับ regular expresion)
นอกจากนั้น... ผมยังลองทั้ง
ค้นหาคำ นับอักษร ในตัวแปล conten มันทำได้หมดครับ
จนผมค่อนข้างแน่ใจว่ามัน สตริงครับ
ผมลองใช้คีย์ อื่นค้นหาแล้วครับ
อย่างเว็บ pantip ผมลองนั่งมองโค้ดดู และพบว่า
ก่อนที่จะเจอคำภาษาไทย ต้องมีแท็ค <!--MsgIDBody=1--> เปิด
และปิดด้วย <!--MsgFile=1--> เสมอ ครับ โดยตัวเลข จะเปลี่ยนไปตามลำดับคอมเม้นครับ
ผมก็เลยลองเอามันไปแทนตัว body ปรากฎว่าไม่เจอเช่นเดิม T^T
มีรุ่นพี่เขาแนะนำว่า ลองใช้วิธีค้นหาใน txt file ดู
ผมก็ตอบไปว่า ผมไม่ทราบวิธีการนั้น
แล้วรุ่นพี่ก็หัวเราะ และบอกว่าไม่รู้เช่นกัน -*-
ปล. ผมชักเหนื่อยแล้วแฮะ...ยากชะมัดเลย พอมีวิธีอื
ผมก็ตอบไปว่า ผมไม่ทราบวิธีการนั้น
แล้วรุ่นพี่ก็หัวเราะ และบอกว่าไม่รู้เช่นกัน -*-
ปล. ผมชักเหนื่อยแล้วแฮะ...ยากชะมัดเลย พอมีวิธีอื่นแนะนำไหมครับ
แนวคิดก็คือ ค้นหา tag เปิด แล้วก็ค้นหา tag ปิด
เอา ปิด - เปิด ก็จะได้ตำแหน่งข้อความตรงกลางออกมา
ทำงานกับ string ถ้าไม่รู้วิธีการใช้ฟังก์ชั่นพวกนี้ก็อาจจะยากหน่อยแหละครับ ซึ่งในความเป็นจริง อาจมีอีกหลายวิธี ขึ้นกับความถนัดของผู้ใช้
ปล. ถึงยังไงฟังก์ชั่นในกลุ่ม preg ก็มีประสิทธิ์ภาพดีที่สุดครับ แต่มันค่อนข้างใช้ยาก ถ้ายังพอมีเวลา ผมแนะนำให้ลองศึกษาดูครับ ซึ่งแหล่งข้อมูลที่ดีที่สุดก็ที่ php.net ครับ
อ้อ ตัวอักษรที่เห็นบน Browser บางตัวเช่น < อาจเป็น > ก้ได้นะครับ ซึ่งมันอาจทำให้เราหลงทาง
ใช่ครับ
ผมเจาะจงแค่เว็บบอร์ดของเว็บ พันทิพ เด็กดี และ วิชาการ.คอม เท่านั้นเหละครับ
ผมคิดอีกวิธีนึงออกแล้วครับ
เด๋วทดลองใช้งานดูก่อน
นั่นคือการใช้ explode ตัดเว็บช่วงๆ ตัดทั้ง หมด 3 ครั้ง
แต่ก็เจอปัญหาอยู่ดี
มันมีวิธีมี่เก็บ ตัวเครื่องหมาย ""
ใส่ในตัวแปรได้ไหมครับ
อย่างเช่น
$a = " he said "I Love YOU"";
มันจะเก็บแค่ he said เฉยๆรึเปลาครับ
ก็ใช้วิธีดียวกันกับการตัด tag แหละครับ
ตอนนี้ตัดได้เป็นความเห็นๆ แล้ว
กำลังทำในส่วนค้นหา ชื่อหมาวิทยาลัยอยู่
พอจะมีวิธีอะไรเสนอ แนะไหมครับ
ผมคิดว่าผมจะทำโดยใช้ if else เอา แต่ต้องลองก่อน อ่ะครับ
การค้นหาคำทั่วไปก็ stripos() ครับ ใช้วิธีวนลูปค้นหาชื่อวิทยาลัยที่รู้จักที่ละชื่อ
ขอบคุณครับ
ผมลองใช้ if else โค้ดยาวมาก
เด๋วลองวิธี stripos ดูครับ
ขอบคุณมากๆเลยครับ เด๋วติดอีก เด๋วมาถามอีก
ผมคิดว่าจะใช้ฟังก์ชั่นตัดคำหยาบ ในการนับคำที่ดี และ ไม่ดี
แต่มันใช้ไม่ได้อ่ะครับ ไม่รู้ทำไม แต่มันไม่ยอมเป็นตามเงื่อนไขเลย
โดยผมใช้โค้ด ตามนี้ครับ
<?php
$b = "ความรักเรารับ สวยงามและราบรื่นอยู่ใช่ไหม?";
echo $b,"<br>";
$summ = checkWordBad($b);
echo $summ[1];
function checkWordBad($word){
$good = array("ราบรื่น","ไม่มีปัญหา","สวยหรู","ชัดเจน","ดี","เจ๋ง","พยายาม","อดทน","ขอบคุณ","สบายใจ","ชอบ","มั่นคง","จุดยืน","มุ่งมั่น","น่าสนใจ","เก่ง","แชมป์","น่าสนใจ","ข้อดี","ไม่เป็นไร","คนดี","อัธยาศัยดี","กว้างขวาง","สวย","ร่มรื่น","สะอาด","บริสุทธิ์","ปลอดโปร่ง","มีคุณค่า","เชื่อถือได้","มีความสามารถ","ดีงาม","กันเอง","มีคุณภาพ","มีอนาคต","มีชื่อเสียง","เจริญ") ;
$bad = array("เลว","ไม่ราบรื่น","มีปัญหา","ไม่สวยหรู","ขัดแย้ง","สับสน","ท้อ","เครียด","แห้ว","เสีย","เจ็บใจ","อุทาหรณ์","ใจร้อน","แย่","ห่วย","ผิดพลาด","มั่ว","โมโห","ไม่ชอบ","ไม่มีคุณภาพ","ข้อเสีย","เรียนยาก","จบยาก","ด้อย","วอกแวก","อคติ","เบื่อ","แพง","เซง","โกง","กะหรี่","ตาถั่ว","คิดผิด","สาด","แดรก","ห่า","เหี้ย","สัส","พล่าม","ตูด","เบื่อ","บ่อนทำลาย","แคบ","อันธพาล","ด่า","เหรี้ย","โหด","แม่ง","แมร่ง","อีห่า","โง่","เด็กเสี่ย","ผับ","บาร์","ใจแตก","กระหรี่","เยด","ดอ","ไม่ดี","สกปรก","แคบ","อโคจร","ลำบาก","ลึก","แสด") ;
$wgood = 0;
foreach ($good as $value) {
$wgood = wgood + 1;
//$word = str_replace($value,$strCensor ,$word);
}
$wbad = 0;
foreach ($bad as $value) {
$wbad = $wbad+1;
//$word = str_replace($value,$strCensor ,$word);
}
$rt = array($wgood,$wbad);
return $rt;
}
?>
ผลลัพธ์ ได้ 65 ทั้งๆ ที่น่าจะ 0
ดูตัวอย่างที่ถูกต้องนะ
<?php
$wgood = 0; // เริ่มต้น 0 คือไม่มี
foreach($good AS $item) { // วนลูปคำดี
if(stripos($word,$item)){ // ค้นหาคำที่ดี
// เจอคำค้น
$wgood++; // เพิ่มจำนวนคำดีที่พบ
echo $item.'<br />'; // debug แสดงผลคำดีที่พบ
}
}
?>
เด๋วจะลองทดลองใช้ดูนะครับ
ตัวแปล $item คืออะไรเหรอครับ
ผม งงๆ
$item ก็ $value ไง ตามแบบของเธอ
ได้แล้วครับ
ขอบพระคุณเป็นอย่างสูงมากๆเลยครับ
อยากมีคลังคำสั่ง อยู่ในหัวเหมือนพี่มั่งจัง
จะได้เก่งๆ T^T
หมั่นทำบ่อยๆ ครับ และก็ หมั่นดู บ่อยๆ ด้วย โค้ดต่างๆ ดูแล้วถึงจะไม่เข้าใจในตอนแรก แต่มันอาจสะกิดต่อมเข้าใจในภายหลังได้ครับ
ผมเองก็ไม่ได้จำคำสั่งได้ทั้งหมดหรอก แต่อาศัยว่า "เหมือนเคยเห็นวิธีนี้ที่ไหน...น๊า"
คือผมเก็บคำที่ผมเจอ มาลงฐานข้อมูลแล้วครับ
แล้วทีนี้ ผมอยากให้นับคำที่ซ้ำกัน รวบไปเลยอ่ะครับเช่น
$a = ("ดี","ดี","ดีจริงๆ","ดีแล้ว","ดี","ไม่ดี","ไม่ดี","ดี","ไม่ดี","ดี",);
อยากให้ แสดงออกมาเป็นตารางว่ามีคำว่า
1. ดี 5 คำ
2.ไม่ดี 3 คำ
อะไรเทือกนี้ผม ผมพยายามคิดหาวิธีทำหัวแทบแตกแล้วครับ คิดไม่ออกเลย
รบกวนหน่อยนะครับ
ปล. ไม่อยากตั้งกระทู้ใหม่ เปลือง data base อิอิ
555+++ ค่าเท่ากันแหละครับ
คำตอบของเรื่องนี้ผมเพิ่งเขียนหมาดๆ ลองดูบทความเกี่ยวกับแอเรย์ครับ